#[derive(AutoStr)]
{
// Attributes available to this derive:
#[str]
#[autorule]
}
Expand description
Automatically add TryFrom
String
and ToString
trait to the attached enum.
§Usage:
str
: add#[str("str1")]
to field will add the conversion from literal “str1” to that field- Support using multiple str:
#str("str")]
. #[autorule = "..." ]
, support autorules:lowercase
.UPPERCASE
.camelCase
.PascalCase
.snake_case
.SCREAMING_CASE
.
§Example:
use racros::AutoStr;
#[derive(AutoStr, Debug)]
enum MyEnum {
#[str("e1", "E1")]
E1,
#[str("e2")]
E2,
#[str("e3", "ee")]
E3,
}
#[derive(AutoStr, Debug)]
enum MyEnum2 {
E21,
#[str("e1", "e2")]
E22(MyEnum),
}
#[derive(AutoStr, Debug)]
#[autorule = "lowercase"]
enum MyEnum3 {
#[str("E31")]
E31,
E32TesT,
#[str("e2")]
E33Test(MyEnum2),
}
#[derive(AutoStr, Debug)]
enum MyEnum4 {
E41(MyEnum),
E42(MyEnum2),
}
assert!(matches!(MyEnum::try_from("e1"), Ok(MyEnum::E1)));
assert!(matches!(MyEnum::try_from("E1"), Ok(MyEnum::E1)));
assert!(matches!(MyEnum::try_from("e2"), Ok(MyEnum::E2)));
assert!(matches!(MyEnum::try_from("ee"), Ok(MyEnum::E3)));
assert!(matches!(MyEnum::try_from("e4"), Err(_)));
assert!(matches!(MyEnum2::try_from("E21"), Ok(MyEnum2::E21)));
assert!(matches!(
MyEnum2::try_from("e1"),
Ok(MyEnum2::E22(MyEnum::E1))
));
assert!(matches!(
MyEnum2::try_from("e2"),
Ok(MyEnum2::E22(MyEnum::E2))
));
assert!(matches!(MyEnum3::try_from("E31"), Ok(MyEnum3::E31)));
assert!(matches!(MyEnum3::try_from("e32test"), Ok(MyEnum3::E32TesT)));
assert!(matches!(
MyEnum3::try_from("e2"),
Ok(MyEnum3::E33Test(MyEnum2::E22(MyEnum::E2)))
));
assert_eq!(MyEnum::E1.to_string(), "e1");
assert_eq!(MyEnum2::E21.to_string(), "E21");
assert_eq!(MyEnum2::E22(MyEnum::E1).to_string(), "e1");
assert_eq!(MyEnum3::E31.to_string(), "E31");
assert_eq!(MyEnum3::E32TesT.to_string(), "e32test");
assert_eq!(MyEnum3::E33Test(MyEnum2::E22(MyEnum::E3)).to_string(), "e3");
assert!(matches!(
MyEnum4::try_from("E1"),
Ok(MyEnum4::E41(MyEnum::E1))
));
assert_eq!(
MyEnum4::try_from("e1").unwrap_err(),
"#[str(...)] attribute not set and fallback guess is ambiguous: both MyEnum and MyEnum2 can accept this convert from \"e1\""
);
assert_eq!(
MyEnum4::try_from("e11").unwrap_err(),
"failed to convert to MyEnum4 :invalid value \"e11\""
);