macro_rules! protocol {
(
$(
$(#[$enum_meta:meta])*
$enum_vis:vis enum $enum_name:ident {
$(
$(#[$variant_meta:meta])*
$variant_vis:vis $variant:ident
$(($inner:ty))?
$({ $( $field_vis:vis $field:ident : $ftype:ty ),+ $(,)? })?
),* $(,)?
}
)*
) => { ... };
}