macro_rules! duck_impl { { $(#[$attr:meta])* $vis:vis fn $method:ident $(< $($($a:lifetime),+$(,)?)? $($TParam:ident),*$(,)? >)?( &self$(,$($value:ident: $T:ty),*$(,)?)? ) $(-> $Returns:ty)? $(where $($wherett:tt)*)?; } => { ... }; { $(#[$attr:meta])* $vis:vis unsafe fn $method:ident $(< $($($a:lifetime),+$(,)?)? $($TParam:ident),*$(,)? >)?( &self$(,$($value:ident: $T:ty),*$(,)?)? ) $(-> $Returns:ty)? $(where $($wherett:tt)*)?; } => { ... }; { $(#[$attr:meta])* $vis:vis fn $method:ident $(< $($($a:lifetime),+$(,)?)? $($TParam:ident),*$(,)? >)?( &mut self as $this:ident $(,$($value:ident: $T:ty),*$(,)?)? ) $(-> $Returns:ty)? $(where $($wherett:tt)*)? $body:block } => { ... }; { $(#[$attr:meta])* $vis:vis unsafe fn $method:ident $(< $($($a:lifetime),+$(,)?)? $($TParam:ident),*$(,)? >)?( &mut self as $this:ident $(,$($value:ident: $T:ty),*$(,)?)? ) $(-> $Returns:ty)? $(where $($wherett:tt)*)? $body:block } => { ... }; { $(#[$attr:meta])* $vis:vis fn $method:ident $(< $($($a:lifetime),+$(,)?)? $($TParam:ident),*$(,)? >)?( &mut self$(,$($value:ident: $T:ty),*$(,)?)? ) $(-> $Returns:ty)? $(where $($wherett:tt)*)?; } => { ... }; { $(#[$attr:meta])* $vis:vis unsafe fn $method:ident $(< $($($a:lifetime),+$(,)?)? $($TParam:ident),*$(,)? >)?( &mut self$(,$($value:ident: $T:ty),*$(,)?)? ) $(-> $Returns:ty)? $(where $($wherett:tt)*)?; } => { ... }; { $(#[$attr:meta])* $vis:vis fn $method:ident $(< $($($a:lifetime),+$(,)?)? $($TParam:ident),*$(,)? >)?( &mut self as $this:ident $(,$($value:ident: $T:ty),*$(,)?)? ) $(-> $Returns:ty)? $(where $($wherett:tt)*)? $body:block } => { ... }; { $(#[$attr:meta])* $vis:vis unsafe fn $method:ident $(< $($($a:lifetime),+$(,)?)? $($TParam:ident),*$(,)? >)?( &mut self as $this:ident $(,$($value:ident: $T:ty),*$(,)?)? ) $(-> $Returns:ty)? $(where $($wherett:tt)*)? $body:block } => { ... }; }