sui_http/middleware/callback/
layer.rs

1// Copyright (c) Mysten Labs, Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4use super::Callback;
5use super::MakeCallbackHandler;
6use tower::Layer;
7
8/// [`Layer`] that adds callbacks to a [`Service`].
9///
10/// See the [module docs](crate::middleware::callback) for more details.
11///
12/// [`Layer`]: tower::layer::Layer
13/// [`Service`]: tower::Service
14#[derive(Debug, Copy, Clone)]
15pub struct CallbackLayer<M> {
16    pub(crate) make_handler: M,
17}
18
19impl<M> CallbackLayer<M> {
20    /// Create a new [`CallbackLayer`] using the given [`MakeCallbackHandler`].
21    pub fn new(make_handler: M) -> Self
22    where
23        M: MakeCallbackHandler,
24    {
25        Self { make_handler }
26    }
27}
28
29impl<S, M> Layer<S> for CallbackLayer<M>
30where
31    M: Clone,
32{
33    type Service = Callback<S, M>;
34
35    fn layer(&self, inner: S) -> Self::Service {
36        Callback {
37            inner,
38            make_callback_handler: self.make_handler.clone(),
39        }
40    }
41}