zon_core/middleware/
mod.rs1use crate::either::Either;
2
3mod tuples;
4
5pub trait HttpMiddleware<S> {
6 type Service;
7
8 fn apply(self, inner: S) -> Self::Service;
9}
10
11impl<S> HttpMiddleware<S> for () {
13 type Service = S;
14
15 fn apply(self, service: S) -> Self::Service {
16 service
17 }
18}
19
20impl<S, M> HttpMiddleware<S> for Option<M>
21where
22 M: HttpMiddleware<S>,
23{
24 type Service = Either<M::Service, S>;
25
26 fn apply(self, inner: S) -> Self::Service {
27 match self {
28 Some(mid) => Either::A(mid.apply(inner)),
29 None => Either::B(inner),
30 }
31 }
32}