brevo/apis/
webhooks_api.rs

1/*
2 * Brevo API
3 *
4 * Brevo provide a RESTFul API that can be used with any languages. With this API, you will be able to :   - Manage your campaigns and get the statistics   - Manage your contacts   - Send transactional Emails and SMS   - and much more...  You can download our wrappers at https://github.com/orgs/brevo  **Possible responses**   | Code | Message |   | :-------------: | ------------- |   | 200  | OK. Successful Request  |   | 201  | OK. Successful Creation |   | 202  | OK. Request accepted |   | 204  | OK. Successful Update/Deletion  |   | 400  | Error. Bad Request  |   | 401  | Error. Authentication Needed  |   | 402  | Error. Not enough credit, plan upgrade needed  |   | 403  | Error. Permission denied  |   | 404  | Error. Object does not exist |   | 405  | Error. Method not allowed  |   | 406  | Error. Not Acceptable  |   | 422  | Error. Unprocessable Entity |
5 *
6 * The version of the OpenAPI document: 3.0.0
7 * Contact: contact@brevo.com
8 * Generated by: https://openapi-generator.tech
9 */
10
11use super::{configuration, ContentType, Error};
12use crate::{apis::ResponseContent, models};
13use reqwest;
14use serde::{de::Error as _, Deserialize, Serialize};
15
16/// struct for typed errors of method [`create_webhook`]
17#[derive(Debug, Clone, Serialize, Deserialize)]
18#[serde(untagged)]
19pub enum CreateWebhookError {
20    Status400(models::ErrorModel),
21    UnknownValue(serde_json::Value),
22}
23
24/// struct for typed errors of method [`delete_webhook`]
25#[derive(Debug, Clone, Serialize, Deserialize)]
26#[serde(untagged)]
27pub enum DeleteWebhookError {
28    Status400(models::ErrorModel),
29    Status404(models::ErrorModel),
30    UnknownValue(serde_json::Value),
31}
32
33/// struct for typed errors of method [`export_webhooks_history`]
34#[derive(Debug, Clone, Serialize, Deserialize)]
35#[serde(untagged)]
36pub enum ExportWebhooksHistoryError {
37    Status400(models::ErrorModel),
38    UnknownValue(serde_json::Value),
39}
40
41/// struct for typed errors of method [`get_webhook`]
42#[derive(Debug, Clone, Serialize, Deserialize)]
43#[serde(untagged)]
44pub enum GetWebhookError {
45    Status400(models::ErrorModel),
46    Status404(models::ErrorModel),
47    UnknownValue(serde_json::Value),
48}
49
50/// struct for typed errors of method [`get_webhooks`]
51#[derive(Debug, Clone, Serialize, Deserialize)]
52#[serde(untagged)]
53pub enum GetWebhooksError {
54    Status400(models::ErrorModel),
55    UnknownValue(serde_json::Value),
56}
57
58/// struct for typed errors of method [`update_webhook`]
59#[derive(Debug, Clone, Serialize, Deserialize)]
60#[serde(untagged)]
61pub enum UpdateWebhookError {
62    Status400(models::ErrorModel),
63    Status404(models::ErrorModel),
64    UnknownValue(serde_json::Value),
65}
66
67pub async fn create_webhook(
68    configuration: &configuration::Configuration,
69    create_webhook: models::CreateWebhook,
70) -> Result<models::CreateModel, Error<CreateWebhookError>> {
71    // add a prefix to parameters to efficiently prevent name collisions
72    let p_create_webhook = create_webhook;
73
74    let uri_str = format!("{}/webhooks", configuration.base_path);
75    let mut req_builder = configuration
76        .client
77        .request(reqwest::Method::POST, &uri_str);
78
79    if let Some(ref user_agent) = configuration.user_agent {
80        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
81    }
82    if let Some(ref apikey) = configuration.api_key {
83        let key = apikey.key.clone();
84        let value = match apikey.prefix {
85            Some(ref prefix) => format!("{} {}", prefix, key),
86            None => key,
87        };
88        req_builder = req_builder.header("api-key", value);
89    };
90    req_builder = req_builder.json(&p_create_webhook);
91
92    let req = req_builder.build()?;
93    let resp = configuration.client.execute(req).await?;
94
95    let status = resp.status();
96    let content_type = resp
97        .headers()
98        .get("content-type")
99        .and_then(|v| v.to_str().ok())
100        .unwrap_or("application/octet-stream");
101    let content_type = super::ContentType::from(content_type);
102
103    if !status.is_client_error() && !status.is_server_error() {
104        let content = resp.text().await?;
105        match content_type {
106            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
107            ContentType::Text => Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::CreateModel`"))),
108            ContentType::Unsupported(unknown_type) => Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::CreateModel`")))),
109        }
110    } else {
111        let content = resp.text().await?;
112        let entity: Option<CreateWebhookError> = serde_json::from_str(&content).ok();
113        Err(Error::ResponseError(ResponseContent {
114            status,
115            content,
116            entity,
117        }))
118    }
119}
120
121pub async fn delete_webhook(
122    configuration: &configuration::Configuration,
123    webhook_id: i64,
124) -> Result<(), Error<DeleteWebhookError>> {
125    // add a prefix to parameters to efficiently prevent name collisions
126    let p_webhook_id = webhook_id;
127
128    let uri_str = format!(
129        "{}/webhooks/{webhookId}",
130        configuration.base_path,
131        webhookId = p_webhook_id
132    );
133    let mut req_builder = configuration
134        .client
135        .request(reqwest::Method::DELETE, &uri_str);
136
137    if let Some(ref user_agent) = configuration.user_agent {
138        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
139    }
140    if let Some(ref apikey) = configuration.api_key {
141        let key = apikey.key.clone();
142        let value = match apikey.prefix {
143            Some(ref prefix) => format!("{} {}", prefix, key),
144            None => key,
145        };
146        req_builder = req_builder.header("api-key", value);
147    };
148
149    let req = req_builder.build()?;
150    let resp = configuration.client.execute(req).await?;
151
152    let status = resp.status();
153
154    if !status.is_client_error() && !status.is_server_error() {
155        Ok(())
156    } else {
157        let content = resp.text().await?;
158        let entity: Option<DeleteWebhookError> = serde_json::from_str(&content).ok();
159        Err(Error::ResponseError(ResponseContent {
160            status,
161            content,
162            entity,
163        }))
164    }
165}
166
167/// This endpoint will submit a request to get the history of webhooks in the CSV file. The link to download the CSV file will be sent to the webhook that was provided in the notifyURL.
168pub async fn export_webhooks_history(
169    configuration: &configuration::Configuration,
170    export_webhooks_history_request: models::ExportWebhooksHistoryRequest,
171) -> Result<models::CreatedProcessId, Error<ExportWebhooksHistoryError>> {
172    // add a prefix to parameters to efficiently prevent name collisions
173    let p_export_webhooks_history_request = export_webhooks_history_request;
174
175    let uri_str = format!("{}/webhooks/export", configuration.base_path);
176    let mut req_builder = configuration
177        .client
178        .request(reqwest::Method::POST, &uri_str);
179
180    if let Some(ref user_agent) = configuration.user_agent {
181        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
182    }
183    if let Some(ref apikey) = configuration.api_key {
184        let key = apikey.key.clone();
185        let value = match apikey.prefix {
186            Some(ref prefix) => format!("{} {}", prefix, key),
187            None => key,
188        };
189        req_builder = req_builder.header("api-key", value);
190    };
191    req_builder = req_builder.json(&p_export_webhooks_history_request);
192
193    let req = req_builder.build()?;
194    let resp = configuration.client.execute(req).await?;
195
196    let status = resp.status();
197    let content_type = resp
198        .headers()
199        .get("content-type")
200        .and_then(|v| v.to_str().ok())
201        .unwrap_or("application/octet-stream");
202    let content_type = super::ContentType::from(content_type);
203
204    if !status.is_client_error() && !status.is_server_error() {
205        let content = resp.text().await?;
206        match content_type {
207            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
208            ContentType::Text => Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::CreatedProcessId`"))),
209            ContentType::Unsupported(unknown_type) => Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::CreatedProcessId`")))),
210        }
211    } else {
212        let content = resp.text().await?;
213        let entity: Option<ExportWebhooksHistoryError> = serde_json::from_str(&content).ok();
214        Err(Error::ResponseError(ResponseContent {
215            status,
216            content,
217            entity,
218        }))
219    }
220}
221
222pub async fn get_webhook(
223    configuration: &configuration::Configuration,
224    webhook_id: i64,
225) -> Result<models::GetWebhook, Error<GetWebhookError>> {
226    // add a prefix to parameters to efficiently prevent name collisions
227    let p_webhook_id = webhook_id;
228
229    let uri_str = format!(
230        "{}/webhooks/{webhookId}",
231        configuration.base_path,
232        webhookId = p_webhook_id
233    );
234    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
235
236    if let Some(ref user_agent) = configuration.user_agent {
237        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
238    }
239    if let Some(ref apikey) = configuration.api_key {
240        let key = apikey.key.clone();
241        let value = match apikey.prefix {
242            Some(ref prefix) => format!("{} {}", prefix, key),
243            None => key,
244        };
245        req_builder = req_builder.header("api-key", value);
246    };
247
248    let req = req_builder.build()?;
249    let resp = configuration.client.execute(req).await?;
250
251    let status = resp.status();
252    let content_type = resp
253        .headers()
254        .get("content-type")
255        .and_then(|v| v.to_str().ok())
256        .unwrap_or("application/octet-stream");
257    let content_type = super::ContentType::from(content_type);
258
259    if !status.is_client_error() && !status.is_server_error() {
260        let content = resp.text().await?;
261        match content_type {
262            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
263            ContentType::Text => Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::GetWebhook`"))),
264            ContentType::Unsupported(unknown_type) => Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::GetWebhook`")))),
265        }
266    } else {
267        let content = resp.text().await?;
268        let entity: Option<GetWebhookError> = serde_json::from_str(&content).ok();
269        Err(Error::ResponseError(ResponseContent {
270            status,
271            content,
272            entity,
273        }))
274    }
275}
276
277pub async fn get_webhooks(
278    configuration: &configuration::Configuration,
279    r#type: Option<&str>,
280    sort: Option<&str>,
281) -> Result<models::GetWebhooks, Error<GetWebhooksError>> {
282    // add a prefix to parameters to efficiently prevent name collisions
283    let p_type = r#type;
284    let p_sort = sort;
285
286    let uri_str = format!("{}/webhooks", configuration.base_path);
287    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
288
289    if let Some(ref param_value) = p_type {
290        req_builder = req_builder.query(&[("type", &param_value.to_string())]);
291    }
292    if let Some(ref param_value) = p_sort {
293        req_builder = req_builder.query(&[("sort", &param_value.to_string())]);
294    }
295    if let Some(ref user_agent) = configuration.user_agent {
296        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
297    }
298    if let Some(ref apikey) = configuration.api_key {
299        let key = apikey.key.clone();
300        let value = match apikey.prefix {
301            Some(ref prefix) => format!("{} {}", prefix, key),
302            None => key,
303        };
304        req_builder = req_builder.header("api-key", value);
305    };
306
307    let req = req_builder.build()?;
308    let resp = configuration.client.execute(req).await?;
309
310    let status = resp.status();
311    let content_type = resp
312        .headers()
313        .get("content-type")
314        .and_then(|v| v.to_str().ok())
315        .unwrap_or("application/octet-stream");
316    let content_type = super::ContentType::from(content_type);
317
318    if !status.is_client_error() && !status.is_server_error() {
319        let content = resp.text().await?;
320        match content_type {
321            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
322            ContentType::Text => Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::GetWebhooks`"))),
323            ContentType::Unsupported(unknown_type) => Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::GetWebhooks`")))),
324        }
325    } else {
326        let content = resp.text().await?;
327        let entity: Option<GetWebhooksError> = serde_json::from_str(&content).ok();
328        Err(Error::ResponseError(ResponseContent {
329            status,
330            content,
331            entity,
332        }))
333    }
334}
335
336pub async fn update_webhook(
337    configuration: &configuration::Configuration,
338    webhook_id: i64,
339    update_webhook: models::UpdateWebhook,
340) -> Result<(), Error<UpdateWebhookError>> {
341    // add a prefix to parameters to efficiently prevent name collisions
342    let p_webhook_id = webhook_id;
343    let p_update_webhook = update_webhook;
344
345    let uri_str = format!(
346        "{}/webhooks/{webhookId}",
347        configuration.base_path,
348        webhookId = p_webhook_id
349    );
350    let mut req_builder = configuration.client.request(reqwest::Method::PUT, &uri_str);
351
352    if let Some(ref user_agent) = configuration.user_agent {
353        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
354    }
355    if let Some(ref apikey) = configuration.api_key {
356        let key = apikey.key.clone();
357        let value = match apikey.prefix {
358            Some(ref prefix) => format!("{} {}", prefix, key),
359            None => key,
360        };
361        req_builder = req_builder.header("api-key", value);
362    };
363    req_builder = req_builder.json(&p_update_webhook);
364
365    let req = req_builder.build()?;
366    let resp = configuration.client.execute(req).await?;
367
368    let status = resp.status();
369
370    if !status.is_client_error() && !status.is_server_error() {
371        Ok(())
372    } else {
373        let content = resp.text().await?;
374        let entity: Option<UpdateWebhookError> = serde_json::from_str(&content).ok();
375        Err(Error::ResponseError(ResponseContent {
376            status,
377            content,
378            entity,
379        }))
380    }
381}