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),* ) => { ... };
}