compose

Macro compose 

Source
macro_rules! compose {
    ($fnLeft:ident,$is_left_fn_async:ident,-> with_args($args:expr) $($others:tt)*) => { ... };
    ($fnLeft:ident,$is_left_fn_async:ident,.provide($p1:expr) $($others:tt)*) => { ... };
    ($f_left:ident,$is_left_fn_async:ident,$f_right:ident, $isRightAsync:ident,  .provide($p:expr) $($others:tt)*) => { ... };
    ($f_left:ident,$is_left_fn_async:ident,$f_right:ident, $isRightAsync:ident,  ->  $($others:tt)*) => { ... };
    ($f_left:ident,$is_left_fn_async:ident,-> $fn:ident.provide($p:expr) $($others:tt)*) => { ... };
    ($f_left:ident,$isLeftFnAsync:ident,-> $fn:ident.provide($p:expr) $($others:tt)*) => { ... };
    ($f_left:ident,$is_left_fn_async:ident,-> $fn:ident $($others:tt)*) => { ... };
    ($fn:ident $($others:tt)*) => { ... };
}