Macro duck_impl

Source
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
    } => { ... };
}