macro_rules! numid {
($(#[$attr:meta])* $vis:vis struct $name:ident) => { ... };
($(#[$attr:meta])* $vis:vis struct $name:ident -> $init_val:expr) => { ... };
($(#[$attr:meta])* $vis:vis struct $name:ident($ty:ty)) => { ... };
($(#[$attr:meta])* $vis:vis struct $name:ident($ty:ty) -> $init_val:expr) => { ... };
($(#[$attr:meta])* $(@$mattr:ident)+ $vis:vis struct $name:ident) => { ... };
($(#[$attr:meta])* $(@$mattr:ident)+ $vis:vis struct $name:ident -> $init_val:expr) => { ... };
($(#[$attr:meta])* $(@$mattr:ident)+ $vis:vis struct $name:ident($ty:ty)) => { ... };
($(#[$attr:meta])* $(@$mattr:ident)* $vis:vis struct $name:ident($ty:ty) -> $init_val:expr) => { ... };
}