sendgrid_async/sendgrid/
requests.rs

1use http_types::{Request, Result, Error, StatusCode};
2use serde::{Deserialize, Serialize};
3
4use super::Client;
5
6#[derive(Deserialize, Debug)]
7pub struct TemplateResponse {
8    pub id: String,
9    pub name: String,
10    pub generation: String,
11}
12
13#[derive(Serialize, Deserialize, Debug)]
14pub struct PageToken(String);
15
16#[derive(Deserialize, Debug)]
17pub struct Metadata {
18    #[serde(rename = "self")]
19    pub current: String,
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub next: Option<PageToken>,
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub prev: Option<PageToken>,
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub count: Option<u32>,
26}
27
28#[derive(Deserialize, Debug)]
29pub struct ListTemplatesResponse {
30    pub result: Vec<TemplateResponse>,
31    #[serde(rename = "_metadata")]
32    pub metadata: Metadata,
33}
34#[derive(Serialize, Debug)]
35pub struct ListTemplatesRequest {
36    #[serde(skip_serializing_if = "Option::is_none")]
37    pub generations: Option<String>,
38    pub page_size: u32,
39    #[serde(skip_serializing_if = "Option::is_none")]
40    pub page_token: Option<String>,
41}
42
43impl Default for ListTemplatesRequest {
44    fn default() -> Self {
45        Self {
46            generations: None,
47            page_size: 200,
48            page_token: None,
49        }
50    }
51}
52
53impl ListTemplatesRequest {
54    pub async fn execute(&self, client: &Client) -> Result<ListTemplatesResponse> {
55        let url = client.url("templates")?;
56        let mut request = Request::get(url);
57        client.set_authorization_header(&mut request)?;
58        request.set_query(self)?;
59
60        let mut response = crate::http_client::execute(request).await?;
61        if response.status() != StatusCode::Ok {
62            return Err(Error::new(response.status(), anyhow::anyhow!("received unexpected status")))
63        }
64
65        response.body_json().await
66    }
67}