Trait Variants
enum_variants
pub trait Variants: Sized { fn variants() -> Vec<Self>; }
fn variants() -> Vec<Self>