use std::future::Future;
use std::net::SocketAddr;
use std::sync::Arc;
use hyper::{service, Body, Request, Response};
mod blocking_handler;
mod error;
pub use blocking_handler::BlockingHandler;
pub use error::ServiceError;
#[derive(Debug)]
pub struct Service;
impl Service {
pub fn from_blocking<H: conduit::Handler>(
handler: Arc<BlockingHandler<H>>,
remote_addr: SocketAddr,
) -> Result<
impl tower_service::Service<
Request<Body>,
Response = Response<Body>,
Error = ServiceError,
Future = impl Future<Output = Result<Response<Body>, ServiceError>> + Send + 'static,
>,
ServiceError,
> {
Ok(service::service_fn(move |request: Request<Body>| {
handler.clone().blocking_handler(request, remote_addr)
}))
}
}