macro_rules! pipe { (@accumulate_expression [$($expr:tt)*]) => { ... }; (@accumulate_expression [$expr:expr] |> $($tail:tt)+) => { ... }; (@accumulate_expression [$($expr:tt)*] $token:tt $($tail:tt)*) => { ... }; (@accumulate_pipes [$expr:expr] [$($pipes:tt)*] |> $pipe:ident($($l_arg:expr,)* $(@ $(@$($_:tt)* $value:tt)? $(, $r_arg:expr)*)?) $($tail:tt)*) => { ... }; (@accumulate_pipes [$expr:expr] [$($pipes:tt)*] |> . $pipe:ident($($arg:expr),*) $($tail:tt)*) => { ... }; (@accumulate_pipes [$expr:expr] [$($pipes:tt)*] |> . $pipe:ident $($tail:tt)*) => { ... }; (@accumulate_pipes [$expr:tt] [$($pipes:tt)*] |> $pipe:ident $($tail:tt)*) => { ... }; (@accumulate_pipes [$expr:expr] [$([$($pipe:tt)+])+]) => { ... }; (@accumulate_pipes [$($expr:tt)*] [$($pipes:tt)*] $($tail:tt)*) => { ... }; ($($tokens:tt)+) => { ... }; () => { ... }; }