macro_rules! catcher {
($name:ident, $($tt:tt)*) => { ... };
(
$name:ident<$data_ty:ty>,
|$check_req:ident, $check_res:ident| $check_block:block,
|$req:ident, $res:ident| -> $ret_type:ty $block:block
) => { ... };
(
$name:ident<$data_ty:ty>,
|$check_req:ident, $check_res:ident| $check_block:block,
|$req:ident, $res:ident, $( $data:ident ),*| -> $ret_type:ty $block:block
) => { ... };
}