hyperap 0.4.0

Hyperap - Hyper wrapper. A very minimal wrapper for Hyper.rs to create a working webserver.
Documentation
extern crate hyperap;
extern crate futures;
use hyperap::hyper::server::{Response, Request};
use hyperap::hyper::{self, Method, StatusCode};
use hyperap::server::{Hyperap, HyperapCore};
use hyperap::response::{resp};
use futures::future::Future;  
use std::sync::Arc;

fn get_static(_a: MiddlewareResult) -> Response {
    hyperap::server::static_file("Cargo.toml")
}
fn hello_world(a: MiddlewareResult) -> Response {
    resp(a.hello.clone() + " at path " + &a.path)
}
pub struct App {
    pub hello: String,
}
pub struct MiddlewareResult {
    path: String,
    hello: String,
}
#[derive(Debug)]
pub struct RouteDefinition {
    parameters: Vec<RouteDefinitionParameters>
}
#[derive(Debug)]
pub struct RouteDefinitionParameters {
    in_: String,
    name: String,
}
impl HyperapCore for App {
    type M = MiddlewareResult;
    type R = RouteDefinition;
    type Resp = Response;
    fn default_route(_a: Self::M) -> Self::Resp {
        Response::new().with_status(StatusCode::NotFound)
    }
    fn middleware(&self, req: Request, func: Arc<Fn(Self::M) -> Self::Resp>, _route_definition: Arc<Option<Self::R>>) -> Box<Future<Item = Response, Error = hyper::Error>> {
        let m = Self::M {
            path: req.path().to_owned(),
            hello: self.hello.clone(),
        };
        let resp = (func)(m);
        Box::new(futures::future::ok(resp))
    }
}
fn main() {
    let the_app = App {
        hello: "Hello World".to_owned(),
    };
    let mut app = Hyperap::new(the_app);
    app.open_browser(true);
    app.add_pure_route(Method::Get, "/static", get_static);
    app.add_route(Method::Get, "/", hello_world, RouteDefinition {
        parameters: vec![RouteDefinitionParameters {
            in_: "query".to_owned(),
            name: "offset".to_owned(),
        }]
    });
    app.port(3000);
    app.run();
}