exc_service/layer.rs
1use std::marker::PhantomData;
2
3use tower::Layer;
4
5use crate::{ExcService, Request};
6
7use super::Exc;
8
9/// Create [`Exc`] from the given [`ExcService`].
10pub struct ExcLayer<Req> {
11 _req: PhantomData<fn() -> Req>,
12}
13
14impl<Req> Default for ExcLayer<Req> {
15 fn default() -> Self {
16 Self { _req: PhantomData }
17 }
18}
19
20impl<S, Req> Layer<S> for ExcLayer<Req>
21where
22 Req: Request,
23 S: ExcService<Req>,
24{
25 type Service = Exc<S, Req>;
26
27 fn layer(&self, inner: S) -> Self::Service {
28 Exc::new(inner)
29 }
30}