macro_rules! __inner_helper { ($gen:tt { $($full_gen:tt)* } { $($params:tt)* } base $($rest:tt)*) => { ... }; ( { $($gen:tt)* } { $($full_gen:tt)* } { $($params:tt)* } $i:ident $($rest:tt)* ) => { ... }; ($gen:tt $full_gen:tt $params:tt $(,)?) => { ... }; }