use crate::{Context, Service};
pub trait RequestInspector<StateIn, RequestIn>: Send + Sync + 'static {
type Error: Send + Sync + 'static;
type RequestOut: Send + 'static;
type StateOut: Clone + Send + Sync + 'static;
fn inspect_request(
&self,
ctx: Context<StateIn>,
req: RequestIn,
) -> impl Future<Output = Result<(Context<Self::StateOut>, Self::RequestOut), Self::Error>> + Send + '_;
}
impl<S, StateIn, StateOut, RequestIn, RequestOut> RequestInspector<StateIn, RequestIn> for S
where
S: Service<StateIn, RequestIn, Response = (Context<StateOut>, RequestOut)>,
RequestIn: Send + 'static,
RequestOut: Send + 'static,
StateIn: Clone + Send + Sync + 'static,
StateOut: Clone + Send + Sync + 'static,
{
type Error = S::Error;
type RequestOut = RequestOut;
type StateOut = StateOut;
fn inspect_request(
&self,
ctx: Context<StateIn>,
req: RequestIn,
) -> impl Future<Output = Result<(Context<Self::StateOut>, Self::RequestOut), Self::Error>> + Send + '_
{
self.serve(ctx, req)
}
}