TODO:
fix api for request, implement `Request::from(..)`
file:///Users/kevin/Dev/Reference/rust/nickel.rs/target/doc/src/hyper/server/request.rs.html#116-120
:::::
Should be able to bound functions by a trait:
fn foo<Rq: Request, Rs: Response>(rq: &mut Rq, rs: Rs) -> Rs::Result {}
or
fn foo<Rq: Request>(rq: &mut R, rs: R::Response) -> R::Result {}
The only worry is that it's not object-safe, but if the usage within the server
(the boxed version) is instanciated with concrete params then it should be fine?
e.g. require `Fn(&mut Request<'a, D>, Response<'a, D>) -> MiddlewareResult<'a, D> {}`
which should be satisfied by the above definitions?
This allows much more flexibility when testing.
Q: where does the serverdata/context param go? Should be an input typeparam?