Skip to main content

payrail_core/
webhook.rs

1use http::HeaderMap;
2
3/// Raw webhook request data required for verification.
4#[derive(Debug, Clone)]
5pub struct WebhookRequest<'a> {
6    /// Raw request body.
7    pub payload: &'a [u8],
8    /// Request headers.
9    pub headers: HeaderMap,
10}
11
12impl<'a> WebhookRequest<'a> {
13    /// Creates a webhook request.
14    #[inline]
15    #[must_use]
16    pub fn new(payload: &'a [u8], headers: HeaderMap) -> Self {
17        Self { payload, headers }
18    }
19}
20
21#[cfg(test)]
22mod tests {
23    use super::*;
24
25    #[test]
26    fn new_keeps_payload_and_headers() {
27        let mut headers = HeaderMap::new();
28        headers.insert("webhook-id", "evt_1".parse().expect("header should parse"));
29
30        let request = WebhookRequest::new(b"{}", headers);
31
32        assert_eq!(request.payload, b"{}");
33        assert_eq!(
34            request
35                .headers
36                .get("webhook-id")
37                .expect("header should exist"),
38            "evt_1"
39        );
40    }
41}