xitca_service/service/
opt.rs

1//! A middleware construct self from `Option<T: Service<S: Service<Req>>>`.
2
3use crate::pipeline::PipelineE;
4
5use super::Service;
6
7impl<T, S, E> Service<Result<S, E>> for Option<T>
8where
9    T: Service<Result<S, E>, Error = E>,
10{
11    type Response = PipelineE<S, T::Response>;
12    type Error = T::Error;
13
14    async fn call(&self, res: Result<S, E>) -> Result<Self::Response, Self::Error> {
15        match *self {
16            None => res.map(PipelineE::First),
17            Some(ref t) => t.call(res).await.map(PipelineE::Second),
18        }
19    }
20}