| Crates.io | enum-variants-strings |
| lib.rs | enum-variants-strings |
| version | 0.3.0 |
| created_at | 2021-12-22 10:43:59.945491+00 |
| updated_at | 2024-03-01 09:03:39.539996+00 |
| description | Derive macro for converting instances of enums to and from strs using variant names |
| homepage | |
| repository | https://github.com/kaleidawave/enum-variants-strings |
| max_upload_size | |
| id | 501574 |
| size | 6,936 |
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"
);
}
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