use reqwest::Method;
use serde_json::Value;
use crate::{
Client, OutboundWebhook, PaginationOptions, RequestOptions, Result, WebhookConfig,
WebhookConfigRequest, WebhookEvent, WebhookEventListOptions,
};
use super::path_segment;
#[derive(Debug, Clone)]
pub struct Webhooks {
client: Client,
}
impl Webhooks {
pub(crate) fn new(client: Client) -> Self {
Self { client }
}
pub async fn get_config(&self) -> Result<WebhookConfig> {
let request = self.client.request(Method::GET, "/v1/webhooks/config")?;
self.client.send(request, RequestOptions::default()).await
}
pub async fn upsert_config(
&self,
input: &WebhookConfigRequest,
options: RequestOptions,
) -> Result<WebhookConfig> {
let request = self
.client
.request(Method::POST, "/v1/webhooks/config")?
.json(input);
self.client.send(request, options).await
}
pub async fn delete_config(&self, options: RequestOptions) -> Result<()> {
let request = self.client.request(Method::DELETE, "/v1/webhooks/config")?;
self.client.send(request, options).await
}
pub async fn send_test(&self, options: RequestOptions) -> Result<Value> {
self.client.post_empty("/v1/webhooks/test", options).await
}
pub async fn list_events(
&self,
options: &WebhookEventListOptions,
) -> Result<Vec<WebhookEvent>> {
let request = self
.client
.request(Method::GET, "/v1/webhooks/events")?
.query(options);
self.client.send_collection(request, "events").await
}
pub async fn get_event(&self, id: &str) -> Result<WebhookEvent> {
let request = self.client.request(
Method::GET,
&format!("/v1/webhooks/events/{}", path_segment(id)),
)?;
self.client.send(request, RequestOptions::default()).await
}
pub async fn replay_event(&self, id: &str, options: RequestOptions) -> Result<Value> {
self.client
.post_empty(
&format!("/v1/webhooks/events/{}/replay", path_segment(id)),
options,
)
.await
}
pub async fn list_outbound(&self, options: &PaginationOptions) -> Result<Vec<OutboundWebhook>> {
let request = self
.client
.request(Method::GET, "/v1/webhooks/outbound")?
.query(options);
self.client.send_collection(request, "outbound").await
}
pub async fn get_outbound(&self, id: &str) -> Result<OutboundWebhook> {
let request = self.client.request(
Method::GET,
&format!("/v1/webhooks/outbound/{}", path_segment(id)),
)?;
self.client.send(request, RequestOptions::default()).await
}
}