Trait Layer
pub trait Layer<S>
Decorates a Service, transforming either the request or the response.
Often, many of the pieces needed for writing network applications can be
reused across multiple services. The Layer trait can be used to write
reusable components that can be applied to very different kinds of services;
for example, it can be applied to services operating on different protocols,
and to both the client and server side of a network transaction.
Log
Take request logging as an example:
# use Service;
# use ;
# use Layer;
# use fmt;
// This service implements the Log behavior
The above log implementation is decoupled from the underlying protocol and is also decoupled from client or server concerns. In other words, the same log middleware could be used in either a client or a server.
Associated Types
type Service;The wrapped service
Required Methods
fn layer(&self, inner: S) -> Self::ServiceWrap the given service with the middleware, returning a new service that has been decorated with the middleware.
Implementors
impl<'a, T, S> Layer<S> for &'a T where T: ?Sized + Layer<S>,impl<F, S, Out> Layer<S> for LayerFn<F> where F: Fn(S) -> Out,impl<S> Layer<S> for ()impl<S> Layer<S> for Identityimpl<S, Inner, Outer> Layer<S> for Stack<Inner, Outer> where Inner: Layer<S>, Outer: Layer<Inner::Service>,impl<S, L1> Layer<S> for (L1,) where L1: Layer<S>,impl<S, L1, L2> Layer<S> for (L1, L2) where L1: Layer<L2::Service>, L2: Layer<S>,impl<S, L1, L2, L3> Layer<S> for (L1, L2, L3) where L1: Layer<L2::Service>, L2: Layer<L3::Service>, L3: Layer<S>,impl<S, L1, L2, L3, L4> Layer<S> for (L1, L2, L3, L4) where L1: Layer<L2::Service>, L2: Layer<L3::Service>, L3: Layer<L4::Service>, L4: Layer<S>,impl<S, L1, L2, L3, L4, L5> Layer<S> for (L1, L2, L3, L4, L5) where L1: Layer<L2::Service>, L2: Layer<L3::Service>, L3: Layer<L4::Service>, L4: Layer<L5::Service>, L5: Layer<S>,impl<S, L1, L2, L3, L4, L5, L6> Layer<S> for (L1, L2, L3, L4, L5, L6) where L1: Layer<L2::Service>, L2: Layer<L3::Service>, L3: Layer<L4::Service>, L4: Layer<L5::Service>, L5: Layer<L6::Service>, L6: Layer<S>,impl<S, L1, L2, L3, L4, L5, L6, L7> Layer<S> for (L1, L2, L3, L4, L5, L6, L7) where L1: Layer<L2::Service>, L2: Layer<L3::Service>, L3: Layer<L4::Service>, L4: Layer<L5::Service>, L5: Layer<L6::Service>, L6: Layer<L7::Service>, L7: Layer<S>,impl<S, L1, L2, L3, L4, L5, L6, L7, L8> Layer<S> for (L1, L2, L3, L4, L5, L6, L7, L8) where L1: Layer<L2::Service>, L2: Layer<L3::Service>, L3: Layer<L4::Service>, L4: Layer<L5::Service>, L5: Layer<L6::Service>, L6: Layer<L7::Service>, L7: Layer<L8::Service>, L8: Layer<S>,impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9> Layer<S> for (L1, L2, L3, L4, L5, L6, L7, L8, L9) where L1: Layer<L2::Service>, L2: Layer<L3::Service>, L3: Layer<L4::Service>, L4: Layer<L5::Service>, L5: Layer<L6::Service>, L6: Layer<L7::Service>, L7: Layer<L8::Service>, L8: Layer<L9::Service>, L9: Layer<S>,impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10> Layer<S> for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10) where L1: Layer<L2::Service>, L2: Layer<L3::Service>, L3: Layer<L4::Service>, L4: Layer<L5::Service>, L5: Layer<L6::Service>, L6: Layer<L7::Service>, L7: Layer<L8::Service>, L8: Layer<L9::Service>, L9: Layer<L10::Service>, L10: Layer<S>,impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11> Layer<S> for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11) where L1: Layer<L2::Service>, L2: Layer<L3::Service>, L3: Layer<L4::Service>, L4: Layer<L5::Service>, L5: Layer<L6::Service>, L6: Layer<L7::Service>, L7: Layer<L8::Service>, L8: Layer<L9::Service>, L9: Layer<L10::Service>, L10: Layer<L11::Service>, L11: Layer<S>,impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12> Layer<S> for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12) where L1: Layer<L2::Service>, L2: Layer<L3::Service>, L3: Layer<L4::Service>, L4: Layer<L5::Service>, L5: Layer<L6::Service>, L6: Layer<L7::Service>, L7: Layer<L8::Service>, L8: Layer<L9::Service>, L9: Layer<L10::Service>, L10: Layer<L11::Service>, L11: Layer<L12::Service>, L12: Layer<S>,impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13> Layer<S> for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13) where L1: Layer<L2::Service>, L2: Layer<L3::Service>, L3: Layer<L4::Service>, L4: Layer<L5::Service>, L5: Layer<L6::Service>, L6: Layer<L7::Service>, L7: Layer<L8::Service>, L8: Layer<L9::Service>, L9: Layer<L10::Service>, L10: Layer<L11::Service>, L11: Layer<L12::Service>, L12: Layer<L13::Service>, L13: Layer<S>,impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14> Layer<S> for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14) where L1: Layer<L2::Service>, L2: Layer<L3::Service>, L3: Layer<L4::Service>, L4: Layer<L5::Service>, L5: Layer<L6::Service>, L6: Layer<L7::Service>, L7: Layer<L8::Service>, L8: Layer<L9::Service>, L9: Layer<L10::Service>, L10: Layer<L11::Service>, L11: Layer<L12::Service>, L12: Layer<L13::Service>, L13: Layer<L14::Service>, L14: Layer<S>,impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15> Layer<S> for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15) where L1: Layer<L2::Service>, L2: Layer<L3::Service>, L3: Layer<L4::Service>, L4: Layer<L5::Service>, L5: Layer<L6::Service>, L6: Layer<L7::Service>, L7: Layer<L8::Service>, L8: Layer<L9::Service>, L9: Layer<L10::Service>, L10: Layer<L11::Service>, L11: Layer<L12::Service>, L12: Layer<L13::Service>, L13: Layer<L14::Service>, L14: Layer<L15::Service>, L15: Layer<S>,impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16> Layer<S> for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16) where L1: Layer<L2::Service>, L2: Layer<L3::Service>, L3: Layer<L4::Service>, L4: Layer<L5::Service>, L5: Layer<L6::Service>, L6: Layer<L7::Service>, L7: Layer<L8::Service>, L8: Layer<L9::Service>, L9: Layer<L10::Service>, L10: Layer<L11::Service>, L11: Layer<L12::Service>, L12: Layer<L13::Service>, L13: Layer<L14::Service>, L14: Layer<L15::Service>, L15: Layer<L16::Service>, L16: Layer<S>,