Enum Group

enum-group is a simple derive macro crate that helps enum types to group their variants. Annotate an enum with #[derive(EnumGroup)], and mark variants some group label names with #[groups(label1, label2)] will auto generate function is_label1 and is_label2. These functions will tell you if a variant of the enum belongs to this grouping.

Example

``` use enum_group::EnumGroup;

[derive(EnumGroup)]

enum Number { #[groups(odd)] One,

#[groups(even, prime)]
Two,

#[groups(odd, prime)]
Three,

Unknown(usize)

}

// will auto generate function fn is_odd(&self) -> bool assert!(Number::One.isodd()); assert!(!Number::Two.isodd()); assert!(Number::Three.isodd()); assert!(!Number::Unknown(0).isodd());

// will auto generate function fn is_even(&self) -> bool assert!(!Number::One.iseven()); assert!(Number::Two.iseven()); assert!(!Number::Three.iseven()); assert!(!Number::Unknown(0).iseven());

// will auto generate function fn is_prime(&self) -> bool assert!(!Number::One.isprime()); assert!(Number::Two.isprime()); assert!(Number::Three.isprime()); assert!(!Number::Unknown(0).isprime()); ```

Usage Restrictions

Each character of the group label name for each variant must be alphanumeric or _.

Panic

``` use enum_group::EnumGroup;

[derive(EnumGroup)]

enum Number { // #[groups(odd&)] groups attribute ident can only contain the characters a-zA-Z0-9 // #[groups(odd)] groups attribute ident must starts wtih characters a-zA-Z // #[groups(odd)] groups attribute ident must ends wtih characters a-zA-Z // #[groups()] must have group ident in groups attribute One, } ```