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
33
34
35
36
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,
max_threads: usize,
) -> impl Future {
let handler = Arc::new(BlockingHandler::new(handler, max_threads));
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)
}
}