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