macro_rules! gated {
(unsafe $attr:ident, $gate:ident, $message:expr $(,)?) => { ... };
(unsafe $attr:ident, $message:expr $(,)?) => { ... };
($attr:ident, $gate:ident, $message:expr $(,)?) => { ... };
($attr:ident, $message:expr $(,)?) => { ... };
}