macro_rules! delegate_method {
{impl $($tt:tt)*} => { ... };
{@impl_collect ($($headtt:tt)*) {$($tailtt:tt)*}} => { ... };
{@impl_collect ($($headtt:tt)*) $tt:tt $($tailtt:tt)*} => { ... };
{@impl_expansion_impl ($($headtt:tt)*) ($($itemtt:tt)*) ($($resttt:tt)*) ($($tailtt:tt)*)} => { ... };
(@impl_finalization ($($headtt:tt)*) ($($tailtt:tt)*)) => { ... };
(@as_item $i:item) => { ... };
{@impl_expansion ($($headtt:tt)*) () ($($tailtt:tt)*)} => { ... };
{@impl_expansion ($($headtt:tt)*)
(type $ascty:ident = $dstty:ty; $($resttt:tt)*) ($($tailtt:tt)*)} => { ... };
{@impl_expansion ($($headtt:tt)*)
($fld:tt $(as $fldty:ty)* : ) ($($tailtt:tt)*)} => { ... };
{@impl_expansion ($($headtt:tt)*)
($fld_last:tt $(as $fldty_last:ty)* :
$fld:tt $(as $fldty:ty)* : $($resttt:tt)*) ($($tailtt:tt)*)} => { ... };
{@impl_expansion ($($headtt:tt)*)
($fld:tt : $($resttt:tt)*) ($($tailtt:tt)*)} => { ... };
{@impl_expansion ($($headtt:tt)*)
($fld:tt as $fldty:ty :
pub fn $fcn:ident $(< $($lt:tt),* >)* ($($args:tt)*) $(-> $r:ty)* $(where $($aty:ident : $atyb_first:tt $(:: $ayb_first_ext:tt)* $(+ $ayb_rest:tt $(:: $ayb_rest_ext:tt)*)*),*)*; $($resttt:tt)* )
($($tailtt:tt)*)} => { ... };
{@impl_expansion ($($headtt:tt)*)
($fld:tt as $fldty:ty :
fn $fcn:ident $(< $($lt:tt),* >)* ($($args:tt)*) $(-> $r:ty)* $(where $($aty:ident : $atyb_first:tt $(:: $ayb_first_ext:tt)* $(+ $ayb_rest:tt $(:: $ayb_rest_ext:tt)*)*),*)*; $($resttt:tt)* )
($($tailtt:tt)*)} => { ... };
(@impl_expansion_item ($($headtt:tt)*)
($fld:tt) ($fldty:ty) ($fcn:ident) ($($kwtt:tt)*) ($($gp:tt)*) ($($args:tt)*) ($($r:tt)*) ($($b:tt)+)
($($resttt:tt)*) ($($tailtt:tt)*)) => { ... };
(@impl_expansion_item ($($headtt:tt)*)
($fld:tt) ($fldty:ty) ($fcn:ident) ($($kwtt:tt)*) ($($gp:tt)*) ($($args:tt)*) ($($r:tt)*) ()
($($resttt:tt)*) ($($tailtt:tt)*)) => { ... };
(@impl_expansion_bound ($($headtt:tt)*)
($fld:tt) ($fldty:ty) ($fcn:ident) ($($kwtt:tt)*) ($($gp:tt)+) ($($args:tt)*) ($($r:tt)*)
($($resttt:tt)*) ($($tailtt:tt)*)) => { ... };
(@impl_expansion_bound ($($headtt:tt)*)
($fld:tt) ($fldty:ty) ($fcn:ident) ($($kwtt:tt)*) () ($($args:tt)*) ($($r:tt)*)
($($resttt:tt)*) ($($tailtt:tt)*)) => { ... };
(@impl_expansion_gp ($($headtt:tt)*)
($fld:tt) ($fldty:ty) ($fcn:ident) ($($kwtt:tt)*) ($($gp:tt)*) (self) ($($r:tt)*)
($($resttt:tt)*) ($($tailtt:tt)*)) => { ... };
(@impl_expansion_gp ($($headtt:tt)*)
($fld:tt) ($fldty:ty) ($fcn:ident) ($($kwtt:tt)*) ($($gp:tt)*) (&self) ($($r:tt)*)
($($resttt:tt)*) ($($tailtt:tt)*)) => { ... };
(@impl_expansion_gp ($($headtt:tt)*)
($fld:tt) ($fldty:ty) ($fcn:ident) ($($kwtt:tt)*) ($($gp:tt)*) (&mut self) ($($r:tt)*)
($($resttt:tt)*) ($($tailtt:tt)*)) => { ... };
(@impl_expansion_gp ($($headtt:tt)*)
($fld:tt) ($fldty:ty) ($fcn:ident) ($($kwtt:tt)*) ($($gp:tt)*)
(self, $( $a:ident : $at:ty ),*) ($($r:tt)*)
($($resttt:tt)*) ($($tailtt:tt)*)) => { ... };
(@impl_expansion_gp ($($headtt:tt)*)
($fld:tt) ($fldty:ty) ($fcn:ident) ($($kwtt:tt)*) ($($gp:tt)*)
(&self, $( $a:ident : $at:ty ),*) ($($r:tt)*)
($($resttt:tt)*) ($($tailtt:tt)*)) => { ... };
(@impl_expansion_gp ($($headtt:tt)*)
($fld:tt) ($fldty:ty) ($fcn:ident) ($($kwtt:tt)*) ($($gp:tt)*)
(&mut self, $( $a:ident : $at:ty ),*) ($($r:tt)*)
($($resttt:tt)*) ($($tailtt:tt)*)) => { ... };
(@impl_expansion_gp ($($headtt:tt)*)
($fld:tt) ($fldty:ty) ($fcn:ident) ($($kwtt:tt)*) ($($gp:tt)*)
($( $a:ident : $at:ty ),*) ($($r:tt)*)
($($resttt:tt)*) ($($tailtt:tt)*)) => { ... };
}