macro_rules! buffer { ($name:ident($buffer_len:expr) { $($field:ident : ($ty:tt, $offset:expr)),* $(,)? }) => { ... }; ($name:ident { $($field:ident : ($ty:tt, $offset:expr)),* $(,)? }) => { ... }; ($name:ident, $buffer_len:expr) => { ... }; ($name:ident) => { ... }; }