rama_core/inspect/
option.rs

1use crate::{Context, Service};
2
3impl<I, StateIn, StateOut, RequestIn, RequestOut> Service<StateIn, RequestIn> for Option<I>
4where
5    I: Service<StateIn, RequestIn, Response = (Context<StateOut>, RequestOut)>,
6    StateIn: Into<StateOut> + Clone + Send + Sync + 'static,
7    StateOut: Clone + Send + Sync + 'static,
8    RequestIn: Into<RequestOut> + Send + 'static,
9    RequestOut: Send + 'static,
10{
11    type Error = I::Error;
12    type Response = I::Response;
13
14    async fn serve(
15        &self,
16        ctx: Context<StateIn>,
17        req: RequestIn,
18    ) -> Result<Self::Response, Self::Error> {
19        match self {
20            Some(inspector) => inspector.serve(ctx, req).await,
21            None => Ok((ctx.map_state(Into::into), req.into())),
22        }
23    }
24}