Skip to main content

actix_web/middleware/
identity.rs

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