macro_rules! mp4_versioned_data {
    ($(#[$attr:meta])* $vis:vis struct $name:ident { $($v:vis $data_name:ident: $data:ty),* $(,)* }) => { ... };
    ($(#[$attr:meta])* $vis:vis struct $name:ident ($($v:vis $data:ty),* $(,)* );) => { ... };
    (@bytes $count:ident, $self:ident, $version:ident, $flags:ident) => { ... };
    (@bytes $count:ident, $self:ident, $version:ident, $flags:ident, $data:ty) => { ... };
    (@bytes $count:ident, $self:ident, $version:ident, $flags:ident, $data:ty, $data2:ty) => { ... };
    (@bytes $count:ident, $self:ident, $version:ident, $flags:ident, $data:ty, $data2:ty, $data3:ty) => { ... };
    (@bytes $count:ident, $self:ident, $version:ident, $flags:ident, $data:ty, $data2:ty, $data3:ty, $data4:ty) => { ... };
    (@write $count:ident, $self:ident, $version:ident, $flags:ident, $writer:ident) => { ... };
    (@write $count:ident, $self:ident, $version:ident, $flags:ident, $writer:ident, $data:ty) => { ... };
    (@write $count:ident, $self:ident, $version:ident, $flags:ident, $writer:ident, $data:ty, $data2:ty) => { ... };
    (@write $count:ident, $self:ident, $version:ident, $flags:ident, $writer:ident, $data:ty, $data2:ty, $data3:ty) => { ... };
    (@write $count:ident, $self:ident, $version:ident, $flags:ident, $writer:ident, $data:ty, $data2:ty, $data3:ty, $data4:ty) => { ... };
}