macro_rules! type_state_enum {
(
STATE: $state_ident: ident
$( <[$( $state_gen: tt )*]> )?
$( where [$( $state_gen_bound: tt )*] )?
{ $state_field_ident: ident }
ENUM_OUT: {
#[vars( $( $all_meta: meta ),* $(,)? )]
$( #[$enum_meta: meta] )*
$enum_vis: vis enum $enum_ident: ident {
$(
$( [@ $ignore: ident] )?
$( #[$var_meta: meta] )*
$var_ident: ident $( ( $($var_tuple: tt)* ) )? $( { $($var_fields: tt)* } )?
),*
$(,)?
}
}
DELEGATES: {
$(
impl $( <[ $( $trait_gen: tt )* ]> )?
trait $trait_ty: path
$( where [ $( $trait_bound: tt )* ] )?
{
$( [ $( $item: tt )* ] )*
}
)*
$(
impl {
$( [ $( $std_impl: tt )* ] )*
}
)?
}
) => { ... };
(@ENUM_DEF
{ $state_gen_1: ident }
$state_ident: ident
#[vars( $( $all_meta: meta ),* $(,)? )]
$( #[$enum_meta: meta] )*
$enum_vis: vis enum $enum_ident: ident {
$( $var_ident: ident ),*
$(,)?
}
) => { ... };
(
STATE: {
$( #[ $state_meta: meta ] )*
$state_vis: vis struct $state_ident: ident {
$( $state_field_ident: ident : $state_field_ty: ty ),*
$(,)?
}
}
ENUM_OUT: {
#[vars( $( $all_meta: meta ),* $(,)? )]
$( #[$enum_meta: meta] )*
$enum_vis: vis enum $enum_ident: ident {
$(
$( [@ $ignore: ident] )?
$( #[$var_meta: meta] )*
$var_ident: ident $( ( $($var_tuple: tt)* ) )? $( { $($var_fields: tt)* } )?
),*
$(,)?
}
}
DELEGATES: {
$(
impl $( <[ $( $trait_gen: tt )* ]> )?
trait $trait_ty: path
$( where [ $( $trait_bound: tt )* ] )?
{
$( [ $( $item: tt )* ] )*
}
)*
$(
impl {
$( [ $( $std_impl: tt )* ] )*
}
)?
}
) => { ... };
}