Enums 如何将字符串转换为枚举?
我的任务是创建一个名为Enums 如何将字符串转换为枚举?,enums,casting,rust,Enums,Casting,Rust,我的任务是创建一个名为的方法,该方法将返回一个切片,但我不确定这是正确的方法,因为该代码没有编译 enum WSType { ACK, REQUEST, RESPONSE, } impl WSType { fn to_str(&self) -> &str { match self { ACK => "ACK", REQUEST => "REQUEST",
的方法,该方法将返回一个切片,但我不确定这是正确的方法,因为该代码没有编译
enum WSType {
ACK,
REQUEST,
RESPONSE,
}
impl WSType {
fn to_str(&self) -> &str {
match self {
ACK => "ACK",
REQUEST => "REQUEST",
RESPONSE => "RESPONSE",
}
}
}
fn main() {
let val = "ACK";
// test
match val {
ACK.to_str() => println!("ack"),
REQUEST.to_str() => println!("ack"),
RESPONSE.to_str() => println!("ack"),
_ => println!("unexpected"),
}
}
正确的做法是实施。这里,我将匹配表示每个枚举变量的字符串文字:
#[derive(Debug)]
enum WSType {
Ack,
Request,
Response,
}
impl std::str::FromStr for WSType {
type Err = String;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"ACK" => Ok(WSType::Ack),
"REQUEST" => Ok(WSType::Request),
"RESPONSE" => Ok(WSType::Response),
_ => Err(format!("'{}' is not a valid value for WSType", s)),
}
}
}
fn main() {
let as_enum: WSType = "ACK".parse().unwrap();
println!("{:?}", as_enum);
let as_enum: WSType = "UNKNOWN".parse().unwrap();
println!("{:?}", as_enum);
}
@Shepmaster是的,你是对的,它不编译。我想我应该在原帖中提到它。我试图将随机字符串片段与特定枚举匹配。谢谢@Shepmaster,它看起来很完美。
use strum_macros::EnumString;
#[derive(Debug, EnumString)]
#[strum(serialize_all = "shouty_snake_case")]
enum WSType {
Ack,
Request,
Response,
}