serv 0.2.0

oneshot-style HTTP API builder
Documentation
extern crate hyper;
#[macro_use]
extern crate serde_derive;
extern crate serv;
extern crate tokio;
extern crate tokio_timer;

use std::time::*;

use hyper::rt::Future;

#[derive(Serialize)]
struct HelloResp {
    msg: String,
}

fn hello(_req: serv::Empty) -> Box<Future<Item = HelloResp, Error = serv::Error>> {
    let delay = Instant::now() + Duration::from_secs(1);
    let f = tokio_timer::Delay::new(delay).then(|_| {
        Ok(HelloResp {
            msg: "hello, world".to_owned(),
        })
    });
    Box::new(f)
}

fn main() {
    use serv::server::{Routes, Server};
    let addr = ([127, 0, 0, 1], 3000).into();

    let mut routes = Routes::new();
    routes.push(hyper::Method::GET, "/", serv::async::serv(hello));
    let server = Server::new(routes);

    let server = hyper::server::Server::bind(&addr)
        .serve(move || Ok::<_, hyper::Error>(server.clone()))
        .map_err(|e| eprintln!("failed to serve: {:?}", e));

    let mut rt = tokio::runtime::current_thread::Runtime::new().expect("failed to create runtime");
    rt.block_on(server).expect("error on runtime");
}