1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
use super::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 bind<H: conduit::Handler>(addr: &SocketAddr, handler: H) -> impl Future {
let handler = Arc::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_conduit(handler, remote_addr) }
});
hyper::Server::bind(&addr).serve(make_service)
}
}