actix_web/middleware/
identity.rs

1//! A no-op middleware. See [Noop] for docs.
2
3use actix_utils::future::{ready, Ready};
4
5use crate::dev::{forward_ready, Service, Transform};
6
7/// A no-op middleware that passes through request and response untouched.
8#[derive(Debug, Clone, Default)]
9#[non_exhaustive]
10pub struct Identity;
11
12impl<S: Service<Req>, Req> Transform<S, Req> for Identity {
13    type Response = S::Response;
14    type Error = S::Error;
15    type Transform = IdentityMiddleware<S>;
16    type InitError = ();
17    type Future = Ready<Result<Self::Transform, Self::InitError>>;
18
19    #[inline]
20    fn new_transform(&self, service: S) -> Self::Future {
21        ready(Ok(IdentityMiddleware { service }))
22    }
23}
24
25#[doc(hidden)]
26pub struct IdentityMiddleware<S> {
27    service: S,
28}
29
30impl<S: Service<Req>, Req> Service<Req> for IdentityMiddleware<S> {
31    type Response = S::Response;
32    type Error = S::Error;
33    type Future = S::Future;
34
35    forward_ready!(service);
36
37    #[inline]
38    fn call(&self, req: Req) -> Self::Future {
39        self.service.call(req)
40    }
41}