1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use crate::ValidateGitHubWebhook;
use tower::Layer;

#[derive(Clone)]
pub struct ValidateGitHubWebhookLayer<Secret> {
    webhook_secret: Secret,
}

impl<Secret> ValidateGitHubWebhookLayer<Secret> {
    pub fn new(webhook_secret: Secret) -> Self {
        Self { webhook_secret }
    }
}

impl<S, Secret> Layer<S> for ValidateGitHubWebhookLayer<Secret>
where
    Secret: AsRef<[u8]> + Clone,
{
    type Service = ValidateGitHubWebhook<S>;

    fn layer(&self, inner: S) -> Self::Service {
        ValidateGitHubWebhook::new(self.webhook_secret.clone(), inner)
    }
}