macro_rules! register_fields {
(@ root $ (# [$ attr_struct : meta]) * $ name : ident { $ ($ input : tt) * }) => { ... };
(@ munch ($ (# [$ attr_end : meta]) * ($ offset : expr => @ END),) ->
{
struct $ (# [$ attr_struct : meta]) * $ name : ident $
($ (# [$ attr : meta]) * ($ id : ident : $ ty : ty)) *
}) => { ... };
(@ munch
($ (# [$ attr : meta]) *
($ offset_start : expr => $ field : ident : $ ty : ty), $ ($ after : tt) *)
-> { $ ($ output : tt) * }) => { ... };
(@ munch
($ (# [$ attr : meta]) * ($ offset_start : expr => $ padding : ident), $
(# [$ attr_next : meta]) * ($ offset_end : expr => $ ($ next : tt) *), $
($ after : tt) *) -> { $ ($ output : tt) * }) => { ... };
}