macro_rules! func {
($function:ident) => { ... };
($function:ident, num = $num:expr) => { ... };
(name = $name:ident, function = $function:ident, $($a:ident : $t:ty = $v:expr),* ) => { ... };
(name = $name:ident, function = $function:ident, num = $num:expr, $($a:ident : $t:ty = $v:expr),* ) => { ... };
}