Macro optargtype
Source macro_rules! optargtype {
($parser:ident => $name:ident { $( {$fieldname:ident = $id:literal : $($tp:tt)+} )* $(_ = $default:ident)? }) => { ... };
($parser:ident => $name:ident <T> { $( {$fieldname:ident = $id:literal : $($tp:tt)+} )* $(_ = $default:ident)? } @ $iter:ident) => { ... };
(LSP $parser:ident => $name:ident <T> { $( {$fieldname:ident = $id:literal : $($tp:tt)+} )* $(_ = $default:ident)? } @ $iter:ident) => { ... };
(@DEFAULT ) => { ... };
(@DEFAULT $parser:ident $default:ident) => { ... };
(@DOITER $e:ident $name:ident {$($tks:tt)*} {} ) => { ... };
(@TYPE $(T)? str) => { ... };
(@PARSE $(+)? $parser:ident $fieldname:ident str ) => { ... };
(@TRANSLATE $val:ident $cont:ident $name:ident $fieldname:ident str) => { ... };
(@DOITER $e:ident $name:ident {$($tks:tt)*} {$fieldname:ident str; $($rest:tt)* }) => { ... };
(@TYPE $(T)? ()) => { ... };
(@PARSE $(+)? $parser:ident $fieldname:ident () ) => { ... };
(@TRANSLATE $val:ident $cont:ident $name:ident $fieldname:ident ()) => { ... };
(@DOITER $e:ident $name:ident {$($tks:tt)*} {$fieldname:ident (); $($rest:tt)* }) => { ... };
(@TYPE $(T)? Language) => { ... };
(@PARSE $(+)? $parser:ident $fieldname:ident Language ) => { ... };
(@TRANSLATE $val:ident $cont:ident $name:ident $fieldname:ident Language) => { ... };
(@DOITER $e:ident $name:ident {$($tks:tt)*} {$fieldname:ident Language; $($rest:tt)* }) => { ... };
(@TYPE $(T)? f32) => { ... };
(@PARSE $(+)? $parser:ident $fieldname:ident f32 ) => { ... };
(@TRANSLATE $val:ident $cont:ident $name:ident $fieldname:ident f32) => { ... };
(@DOITER $e:ident $name:ident {$($tks:tt)*} {$fieldname:ident f32; $($rest:tt)* }) => { ... };
(@TYPE $(T)? bool?) => { ... };
(@PARSE $(+)? $parser:ident $fieldname:ident bool? ) => { ... };
(@TRANSLATE $val:ident $cont:ident $name:ident $fieldname:ident bool?) => { ... };
(@DOITER $e:ident $name:ident {$($tks:tt)*} {$fieldname:ident bool?; $($rest:tt)* }) => { ... };
(@TYPE $(T)? !) => { ... };
(@PARSE $(+)? $parser:ident $fieldname:ident ! ) => { ... };
(@TRANSLATE $val:ident $cont:ident $name:ident $fieldname:ident !) => { ... };
(@DOITER $e:ident $name:ident {$($tks:tt)*} {$fieldname:ident !; $($rest:tt)* }) => { ... };
(@TYPE T T*) => { ... };
(@PARSE+ $parser:ident $fieldname:ident T* ) => { ... };
(@TRANSLATE $val:ident $cont:ident $name:ident $fieldname:ident T*) => { ... };
(@DOITER $e:ident $name:ident {} {$fieldname:ident T*; $($rest:tt)* }) => { ... };
(@DOITER $e:ident $name:ident {$($tks:tt)+} {$fieldname:ident T*; $($rest:tt)* }) => { ... };
(@TYPE $(T)? Args) => { ... };
(@PARSE $(+)? $parser:ident $fieldname:ident Args) => { ... };
(@TRANSLATE $val:ident $cont:ident $name:ident $fieldname:ident Args) => { ... };
(@DOITER $e:ident $name:ident {$($tks:tt)*} {$fieldname:ident Args; $($rest:tt)* }) => { ... };
(@TYPE $(T)? { $tp:ty => $($r:tt)*}) => { ... };
(@PARSE $(+)? $parser:ident $fieldname:ident { $tp:ty => $($r:tt)*}) => { ... };
(@TRANSLATE $val:ident $cont:ident $name:ident $fieldname:ident { $tp:ty => $($r:tt)*}) => { ... };
(@DOITER $e:ident $name:ident {$($tks:tt)*} {$fieldname:ident { $tp:ty => $($r:tt)*}; $($rest:tt)* }) => { ... };
}