pub trait EnumList where Self: Sized, { fn variants() -> &'static [Self]; }
A C-like enum can list its variants
Slice of available variants