macro_rules! states {
($enum:ident { $($trait:ident $name:ident($($arg:ident: $t:ty),*)),+ }) => { ... };
(trait_bounds $trait:ident) => { ... };
(trait_bounds $trait:ident $(, $traits:ident)+) => { ... };
(as_item $t:item) => { ... };
}