macro_rules! test_fields {
    (@root $struct:ident $(<$life:lifetime>)? { $($input:tt)* } ) => { ... };
    (@munch $struct:ident $(<$life:lifetime>)? $sum:ident
        (
            $(#[$attr_end:meta])*
            ($size:expr => @END),
        )
        -> {$($stmts:block)*}
    ) => { ... };
    (@munch $struct:ident $(<$life:lifetime>)? $sum:ident
        (
            $(#[$attr:meta])*
            ($offset_start:expr => $vis:vis $field:ident: $ty:ty),
            $(#[$attr_next:meta])*
            ($offset_end:expr => $($next:tt)*),
            $($after:tt)*
        )
        -> {$($output:block)*}
    ) => { ... };
    (@munch $struct:ident $(<$life:lifetime>)? $sum:ident
        (
            $(#[$attr:meta])*
            ($offset_start:expr => $padding:ident),
            $(#[$attr_next:meta])*
            ($offset_end:expr => $($next:tt)*),
            $($after:tt)*
        )
        -> {$($output:block)*}
    ) => { ... };
}