如何将字符串的值限制为 Rust 中的某个集合?
\n// string literal union type with\n// values of "admin", "owner", "user"\ntype Roles = "admin" | "owner" | "user";\n\n// use the type "Roles" for the "role" variable\nlet role: Roles;\n\n// assing a value other than "admin", "owner", "user"\nrole = "Hello World!"; // \xe2\x9d\x8c not allowed. Type \'"Hello World!"\' is not assignable to type \'Roles\'\n\n// assign a valid string value\nrole = "admin"; // \xe2\x9c\x85 allowed.\nRun Code Online (Sandbox Code Playgroud)\n锈的等价物是什么
\n您可以使用 anenum代表您的角色,然后使用序列化方法(例如使用strum或serde)来解析任何字符串输入并验证它们是否可以应用。
这是使用扫弦的示例:
use std::str::FromStr;
use strum_macros::EnumString;
#[derive(Debug, PartialEq, EnumString)]
#[strum(ascii_case_insensitive)]
enum Role {
Admin,
Owner,
User,
}
// tests
let admin = Role::from_str("admin").unwrap();
assert_eq!(Role::Admin, admin);
Run Code Online (Sandbox Code Playgroud)