macro_rules! variant {
($expression:expr, $pattern:pat_param $(if $guard:expr)?) => { ... };
($expression:expr, $pattern:pat_param $(if $guard:expr)?, $err:expr) => { ... };
($expression:expr, $pattern:pat_param $(if $guard:expr)?, else $err:expr) => { ... };
}