tower_web/middleware/
chain.rs1use super::Middleware;
2
3use tower_service::Service;
4
5#[derive(Debug)]
9pub struct Chain<Inner, Outer>
10{
11 inner: Inner,
12 outer: Outer,
13}
14
15impl<Inner, Outer> Chain<Inner, Outer> {
16 pub fn new(inner: Inner, outer: Outer) -> Self {
18 Chain {
19 inner,
20 outer,
21 }
22 }
23}
24
25impl<S, Inner, Outer> Middleware<S> for Chain<Inner, Outer>
26where S: Service,
27 Inner: Middleware<S>,
28 Outer: Middleware<Inner::Service>,
29{
30 type Request = Outer::Request;
31 type Response = Outer::Response;
32 type Error = Outer::Error;
33 type Service = Outer::Service;
34
35 fn wrap(&self, service: S) -> Self::Service {
36 self.outer.wrap(
37 self.inner.wrap(service))
38 }
39}
40
41impl<T, Inner, Outer> ::util::Chain<T> for Chain<Inner, Outer> {
42 type Output = Chain<Self, T>;
43
44 fn chain(self, other: T) -> Self::Output {
45 Chain::new(self, other)
46 }
47}