xitca_service/middleware/
unchecked_ready.rs

1use crate::{ready::ReadyService, service::Service};
2
3/// A middleware unconditionally treat inner service type as ready.
4/// See [ReadyService] for detail.
5#[derive(Clone, Copy)]
6pub struct UncheckedReady;
7
8impl<S, E> Service<Result<S, E>> for UncheckedReady {
9    type Response = UncheckedReadyService<S>;
10    type Error = E;
11
12    async fn call(&self, res: Result<S, E>) -> Result<Self::Response, Self::Error> {
13        res.map(UncheckedReadyService)
14    }
15}
16
17pub struct UncheckedReadyService<S>(S);
18
19impl<S, Req> Service<Req> for UncheckedReadyService<S>
20where
21    S: Service<Req>,
22{
23    type Response = S::Response;
24    type Error = S::Error;
25
26    #[inline]
27    async fn call(&self, req: Req) -> Result<Self::Response, Self::Error> {
28        self.0.call(req).await
29    }
30}
31
32impl<S> ReadyService for UncheckedReadyService<S> {
33    type Ready = ();
34
35    #[inline]
36    async fn ready(&self) -> Self::Ready {}
37}