6 releases
0.3.0 | Mar 1, 2024 |
---|---|
0.2.3 | Apr 11, 2023 |
0.2.2 | Mar 7, 2023 |
0.2.1 | Jan 25, 2023 |
0.1.0 | Dec 22, 2021 |
#735 in Rust patterns
325 downloads per month
Used in 11 crates
(8 directly)
5KB
Enum Variants Strings
Generates conversions of enums from strings and into strings based on variant identifiers
use enum_variants_strings::EnumVariantsStrings;
#[derive(Debug, PartialEq, EnumVariantsStrings)]
enum Variants {
X,
Y(i32),
#[enum_variants_strings_mappings("z", "zee")]
Z {
x: String,
y: String,
},
}
fn main() {
assert_eq!(Variants::from_str("x"), Ok(Variants::X));
assert_eq!(Variants::from_str("y"), Ok(Variants::Y(0)));
assert_eq!(
Variants::from_str("z"),
Ok(Variants::Z {
x: String::default(),
y: String::default(),
})
);
assert_eq!(Variants::X.to_str(), "x");
assert_eq!(
Variants::Z {
x: "abc".into(),
y: "xyz".into()
}
.to_str(),
"zee"
);
}
Identifier mapping
By default variant identifier/names are transformed to their snake case version
This can be changed via #[enum_variants_strings_transform(transform = ...)]
use enum_variants_strings::EnumVariantsStrings;
#[derive(Debug, PartialEq, EnumVariantsStrings)]
#[enum_variants_strings_transform(transform = "none")]
enum EnumA {
Foo,
Bar,
}
There are several transforms
"snake_case"
, separate uppercase and numeric boundaries with_
(default)"kebab_case"
, snake case with-
instead of underscores"upper_case"
, uppercase of identifier in source"lower_case"
, lowercase of identifier in source"none"
, no mapping from the identifier in the source
Dependencies
~245–690KB
~16K SLoC