1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#[macro_export]
macro_rules! map_try {
  [ $expr:expr, $pat:pat => $mapper:expr ] => ({
    match $expr {
        Ok(val) => val,
        $pat => {
            let __e = $mapper;

            return Err(Into::into(__e));
        }
    }
  });
}

#[macro_export]
macro_rules! async_middleware {
  ($ctx:ty, [$($x:expr),+]) => {{
      use thruster::{Chain, Middleware, MiddlewareChain, MiddlewareNext, MiddlewareReturnValue};

      const __THRUSTER_MIDDLEWARE_ARRAY: &'static [
          fn($ctx, MiddlewareNext<$ctx>) -> MiddlewareReturnValue<$ctx>
      ] = &[$( $x ),*];

      static __THRUSTER_MIDDLEWARE: Middleware<$ctx> = Middleware {
          middleware: __THRUSTER_MIDDLEWARE_ARRAY
      };

      let chain = Chain::new(vec![&__THRUSTER_MIDDLEWARE]);

      MiddlewareChain {
          chain,
          assigned: true
      }
  }}
}