macro_rules! specialize_call {
(@single_mapping,
( $($acc_p:pat),* ),
( $($acc_t:ty),* ),
$func:tt, $args:tt, $select:tt,
[ ($p:pat => $($t:ty),+ ) $(, $p_t:tt)* $(,)* ],
$mappings:tt
) => { ... };
(@single_mapping,
$acc_p:tt, $acc_t: tt,
$func:tt, $args:tt, $select:tt,
[],
$mappings:tt
) => { ... };
(@specialize_call,
$acc_p:tt,
$acc_t:tt,
$func:tt,
$args:tt,
$select:tt,
($head:tt $(, $tail:tt)*)
) => { ... };
(@specialize_call,
$acc_p:tt,
$acc_t:tt,
$func:tt,
$args:tt,
$select:tt,
()
) => { ... };
(@maybe_invoke,
( $($acc_p:pat),* ),
( $($acc_t:ty),* ),
$select:expr,
$func:ident,
($($arg:expr),*)
) => { ... };
($func:ident, ($($arg:expr),* $(,)*), $select:expr, $($mapping:tt),+ $(,)*) => { ... };
}