[][src]Derive Macro strum::EnumDiscriminants

#[derive(EnumDiscriminants)]
{
    // Attributes available to this derive:
    #[strum]
    #[strum_discriminants]
}

Generate a new type with only the discriminant names.

Given an enum named MyEnum, generates another enum called MyEnumDiscriminants with the same variants, without any data fields. This is useful when you wish to determine the variant of an enum from a String, but the variants contain any non-Default fields. By default, the generated enum has the following derives: Clone, Copy, Debug, PartialEq, Eq. You can add additional derives using the #[strum_discriminants(derive(AdditionalDerive))] attribute.

// Bring trait into scope
use std::str::FromStr;
use strum::IntoEnumIterator;
use strum_macros::{EnumDiscriminants, EnumIter, EnumString};

#[derive(Debug)]
struct NonDefault;

// simple example
#[derive(Debug, EnumDiscriminants)]
#[strum_discriminants(derive(EnumString))]
enum MyEnum {
    Variant0(NonDefault),
    Variant1 { a: NonDefault },
}

// You can also rename the generated enum using the `#[strum_discriminants(name(OtherName))]` attribute:
#[derive(Debug, EnumDiscriminants)]
#[strum_discriminants(derive(EnumIter))]
#[strum_discriminants(name(MyVariants))]
enum MyEnumR {
    Variant0(bool),
    Variant1 { a: bool },
}

// test simple example
assert_eq!(
    MyEnumDiscriminants::Variant0,
    MyEnumDiscriminants::from_str("Variant0").unwrap()
);
// test rename example combined with EnumIter
assert_eq!(
    vec![MyVariants::Variant0, MyVariants::Variant1],
    MyVariants::iter().collect::<Vec<_>>()
);