macro_rules! template { ($pub:vis $name:ident $inner:tt) => { ... }; ($pub:vis $name:ident<$lt:tt> $inner:tt) => { ... }; ($pub:vis $name:ident$(<$lt:tt>)?($($arg:ident: $ty:ty),*) $inner:tt) => { ... }; }