Skip to main content

strum

Macro strum 

Source
macro_rules! strum {
    (
        $(#[$enum_meta:meta])*
        $enum_vis:vis enum $enum_name:ident {
            $(
                $(#[$variant_meta:meta])*
                $variant_name:ident = $string:literal $(| $alias:literal)* $(= $discriminant:expr)?
            ),* $(,)?
        }
        $($rest:tt)*
    ) => { ... };
}
Expand description

Give the passed-in enum a FromStr and Display implementation.

strum_lite::strum! {
    #[derive(Default)]
    pub enum Casing {
        Kebab = "kebab-case" | "kebab" = 100,
        #[default]
        ScreamingSnake = "SCREAMING_SNAKE",
    }
    pub const ALL_VARIANTS; // optional
    throws #[derive(Clone)] ParseCasingError; // optional
}

let derives_are_passed_through = Casing::default();
let implements_display = Casing::Kebab.to_string();
let implements_from_str = "kebab".parse::<Casing>().unwrap();

assert_eq!(Casing::Kebab as i32, 100);     // discriminants are passed through
assert_eq!(Casing::ALL_VARIANTS.len(), 2); // generated constant