nickel::middleware! [] [src]

macro_rules! middleware {
    (|$req:tt, mut $res:ident| $($b:tt)+) => { _middleware_inner!($req, $res, mut $res, $($b)+) };
    (|$req:tt, $res:ident| $($b:tt)+) => { _middleware_inner!($req, $res, $res, $($b)+) };
    (|$req:tt| $($b:tt)+) => { middleware!(|$req, _res| $($b)+) };
    ($($b:tt)+) => { middleware!(|_, _res| $($b)+) };
}

Macro to reduce the boilerplate required for using unboxed closures as Middleware due to current type inference behaviour.

In future, the macro should hopefully be able to be removed while having minimal changes to the closure's code.

Examples

use nickel::{Nickel, HttpRouter};
use std::sync::atomic::{AtomicUsize, Ordering};

let mut server = Nickel::new();

// Some shared resource between requests, must be `Sync + Send`
let visits = AtomicUsize::new(0);

server.get("/", middleware! {
    format!("{}", visits.fetch_add(1, Ordering::Relaxed))
});

server.listen("127.0.0.1:6767");