use crate::{BlockingHandler, Service};
use std::future::Future;
use std::net::SocketAddr;
use std::sync::Arc;
use hyper::server::conn::AddrStream;
use hyper::service;
use service::make_service_fn;
#[derive(Debug)]
pub struct Server;
impl Server {
pub fn serve<H: conduit::Handler>(addr: &SocketAddr, handler: H) -> impl Future {
let handler = Arc::new(BlockingHandler::new(handler));
let make_service = make_service_fn(move |socket: &AddrStream| {
let handler = handler.clone();
let remote_addr = socket.remote_addr();
async move { Service::from_blocking(handler, remote_addr) }
});
hyper::Server::bind(addr).serve(make_service)
}
}