tower_layer/
identity.rs

1use super::Layer;
2use core::fmt;
3
4/// A no-op middleware.
5///
6/// When wrapping a [`Service`], the [`Identity`] layer returns the provided
7/// service without modifying it.
8///
9/// [`Service`]: https://docs.rs/tower-service/latest/tower_service/trait.Service.html
10///
11/// # Examples
12///
13/// ```rust
14/// use tower_layer::Identity;
15/// use tower_layer::Layer;
16///
17/// let identity = Identity::new();
18///
19/// assert_eq!(identity.layer(42), 42);
20/// ```
21#[derive(Default, Clone)]
22pub struct Identity {
23    _p: (),
24}
25
26impl Identity {
27    /// Creates a new [`Identity`].
28    ///
29    /// ```rust
30    /// use tower_layer::Identity;
31    ///
32    /// let identity = Identity::new();
33    /// ```
34    pub const fn new() -> Identity {
35        Identity { _p: () }
36    }
37}
38
39impl<S> Layer<S> for Identity {
40    type Service = S;
41
42    fn layer(&self, inner: S) -> Self::Service {
43        inner
44    }
45}
46
47impl fmt::Debug for Identity {
48    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
49        f.debug_struct("Identity").finish()
50    }
51}