tower_webflow/
layer.rs

1use crate::service::WebflowService;
2use axum::{
3    http::StatusCode,
4    response::{IntoResponse, Response},
5};
6use tower::{BoxError, Layer};
7
8pub async fn box_err_to_res(err: BoxError) -> Response {
9    tracing::error!(?err, "middleware error");
10    (StatusCode::BAD_REQUEST, err.to_string()).into_response()
11}
12
13/// Layer that applies the [WebflowService] middleware.
14#[derive(Clone)]
15pub struct WebflowLayer<Secret> {
16    webflow_form_secret: Secret,
17}
18
19impl<Secret> WebflowLayer<Secret> {
20    pub fn new(webflow_form_secret: Secret) -> Self
21    {
22        Self {
23            webflow_form_secret,
24        }
25    }
26}
27
28impl<S, Secret> Layer<S> for WebflowLayer<Secret>
29where
30    Secret: AsRef<[u8]> + Clone,
31{
32    type Service = WebflowService<S, Secret>;
33
34    fn layer(&self, inner: S) -> Self::Service {
35        WebflowService {
36            inner,
37            secret: self.webflow_form_secret.clone(),
38        }
39    }
40}