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}