macro_rules! decl_method {
( ? $name:ident $doc:literal ($($gen_type:ident)*) ($($fn_params:tt)*) ) => { ... };
( ! $name:ident $doc:literal ($($gen_type:ident)*) ($($fn_params:tt)*) ) => { ... };
( -> $name:ident $doc:literal ($($gen_type:ident)*) ($($fn_params:tt)*) ) => { ... };
( $kind:tt $name:ident $doc:literal ($($gen_type:ident)*) ($($fn_params:tt)*) $param:ident : _ $($tail:tt)* ) => { ... };
( $kind:tt $name:ident $doc:literal ($($gen_type:ident)*) ($($fn_params:tt)*) $param:ident : ($ptype:ty) $($tail:tt)* ) => { ... };
( $kind:tt $name:ident $doc:literal ($($gen_type:ident)*) ($($fn_params:tt)*) $param:ident # _ $($tail:tt)* ) => { ... };
( $kind:tt $name:ident $doc:literal ($($gen_type:ident)*) ($($fn_params:tt)*) $param:ident # ($ptype:ty) $($tail:tt)* ) => { ... };
}