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