Skip to main content

mesa_dev/client/
webhooks.rs

1use crate::low_level::apis::{webhooks_api, Error};
2use crate::models;
3
4use super::RepoClient;
5
6/// Client for webhook operations (`/{org}/{repo}/webhooks`).
7#[derive(Clone, Debug)]
8pub struct WebhooksClient<'a> {
9    pub(super) repo: &'a RepoClient<'a>,
10}
11
12impl WebhooksClient<'_> {
13    /// List webhooks for the repository.
14    ///
15    /// # Errors
16    ///
17    /// Returns an error if the API request fails.
18    #[tracing::instrument(skip(self), fields(org = self.repo.org.org, repo = self.repo.repo), err(Debug))]
19    pub async fn list(
20        &self,
21    ) -> Result<
22        models::GetByOrgByRepoWebhooks200Response,
23        Error<webhooks_api::GetByOrgByRepoWebhooksError>,
24    > {
25        webhooks_api::get_by_org_by_repo_webhooks(
26            self.repo.org.config,
27            self.repo.org.org,
28            self.repo.repo,
29        )
30        .await
31    }
32
33    /// Create a webhook.
34    ///
35    /// # Errors
36    ///
37    /// Returns an error if the API request fails.
38    #[tracing::instrument(skip(self, request), fields(org = self.repo.org.org, repo = self.repo.repo), err(Debug))]
39    pub async fn create(
40        &self,
41        request: models::PostByOrgByRepoWebhooksRequest,
42    ) -> Result<
43        models::PostByOrgByRepoWebhooks201Response,
44        Error<webhooks_api::PostByOrgByRepoWebhooksError>,
45    > {
46        webhooks_api::post_by_org_by_repo_webhooks(
47            self.repo.org.config,
48            self.repo.org.org,
49            self.repo.repo,
50            Some(request),
51        )
52        .await
53    }
54
55    /// Delete a webhook by its ID.
56    ///
57    /// # Errors
58    ///
59    /// Returns an error if the API request fails.
60    #[tracing::instrument(skip(self), fields(org = self.repo.org.org, repo = self.repo.repo), err(Debug))]
61    pub async fn delete(
62        &self,
63        webhook_id: &str,
64    ) -> Result<
65        models::DeleteByOrgApiKeysById200Response,
66        Error<webhooks_api::DeleteByOrgByRepoWebhooksByWebhookIdError>,
67    > {
68        webhooks_api::delete_by_org_by_repo_webhooks_by_webhook_id(
69            self.repo.org.config,
70            self.repo.org.org,
71            self.repo.repo,
72            Some(webhook_id),
73        )
74        .await
75    }
76}