cxmr_util_servers/
router.rs

1//! Router service.
2
3use std::task::{Context, Poll};
4
5use futures_util::future;
6use hyper::{service::Service, Body, Request};
7
8/// Creates a Router tower service.
9pub struct RouterService<T>
10where
11    T: Service<Request<Body>> + Clone,
12{
13    inner: T,
14}
15
16impl<T: Service<Request<Body>> + Clone> RouterService<T> {
17    /// Creates new router service.
18    pub fn new(inner: T) -> RouterService<T> {
19        RouterService { inner }
20    }
21}
22
23impl<I, T> Service<T> for RouterService<I>
24where
25    I: Service<Request<Body>> + Clone,
26{
27    type Response = I;
28    type Error = std::io::Error;
29    type Future = future::Ready<Result<Self::Response, Self::Error>>;
30
31    fn poll_ready(&mut self, _cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
32        Ok(()).into()
33    }
34
35    fn call(&mut self, _: T) -> Self::Future {
36        future::ok(self.inner.clone())
37    }
38}