macro_rules! Struct {
(@() -> {$S:ident $($f:ident : $v:expr,)*}) => { ... };
(@($f:ident : $v:expr, $($t:tt)*) -> {$($r:tt)*}) => { ... };
(@([$($f:ident),*$(,)?] : ..$other:expr, $($t:tt)*) -> {$($r:tt)*}) => { ... };
($S:ident , $($f:ident : $v:expr,)* $([$($f2:ident),*$(,)?] : ..$other:expr,)*) => { ... };
($S:ident, $($t:tt)*) => { ... };
($P:path as $S:ident, $($t:tt)*) => { ... };
($P:path, $($t:tt)*) => { ... };
}