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.
``` use enum_group::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());
```
Each character of the group label name for each variant must be alphanumeric or _
.
``` use enum_group::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, } ```