macro_rules! build_ifs {
    ($context:ident [$val:ident => Some(_), $($pattern:tt)*] $callback:ident($($args:tt)*)) => { ... };
    ($context:ident [$val:ident => None, $($pattern:tt)*] $callback:ident($($args:tt)*)) => { ... };
    ($context:ident [] $callback:ident($($args:tt)*)) => { ... };
}