macro_rules! enum_dispatch {
(
$(#[$trait_attr:meta])*
$trait_vis:vis trait $train_name:ident $(: $lf:lifetime)? $(: $super_trait1:ident $(::$super_trait2:ident)* $(+ $super_trait3:ident $(::$super_trait4:ident)*)*)? $(+ $lf2:lifetime)? {
$($any:tt)*
}
$(#[$enum_attr:meta])*
$enum_vis:vis enum $enum_name:ident {
$($(#[$var_attr:meta])* $variant:ident($variant_type:ty)),+$(,)?
}
) => { ... };
}