1use bytes::Bytes;
2use http::{HeaderMap, StatusCode};
3
4use crate::error::{Error, Result};
5
6pub struct WebhookResponse {
8 pub status: StatusCode,
10 pub body: Bytes,
12}
13
14pub(crate) async fn post(
16 client: &reqwest::Client,
17 url: &str,
18 headers: HeaderMap,
19 body: Bytes,
20) -> Result<WebhookResponse> {
21 let response = client
22 .post(url)
23 .headers(headers)
24 .body(body)
25 .send()
26 .await
27 .map_err(|e| Error::internal("webhook delivery failed").chain(e))?;
28 let status = response.status();
29 let response_body = response
30 .bytes()
31 .await
32 .map_err(|e| Error::internal("failed to read webhook response").chain(e))?;
33
34 Ok(WebhookResponse {
35 status,
36 body: response_body,
37 })
38}