# Enum Variants Strings [![Crates.io badge](https://img.shields.io/crates/v/enum-variants-strings)](https://crates.io/crates/enum-variants-strings) [![Docs.rs badge](https://docs.rs/enum-variants-strings/badge.svg)](https://docs.rs/enum-variants-strings/) Generates conversions of enums from strings and into strings based on variant identifiers ```rust 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 = ...)]` ```rust 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