termii_rust/async_impl/rest/switch/
sender_id.rs

1//! Request new Sender Id and retrieve their status.
2
3use std::{collections::HashMap, sync::Arc};
4
5use async_trait::async_trait;
6
7use crate::{
8    async_impl::http::client,
9    common::{
10        errors, pagination,
11        switch::sender_id::{
12            SenderIDItem, SenderIDRequest, SenderIDRequestResponse, SenderIDResponse,
13        },
14    },
15};
16
17#[derive(Debug)]
18pub struct SenderID<'a> {
19    api_key: &'a str,
20    client: Arc<client::HttpClient>,
21}
22
23impl<'a> SenderID<'a> {
24    pub(crate) fn new(api_key: &'a str, client: Arc<client::HttpClient>) -> SenderID<'a> {
25        SenderID { api_key, client }
26    }
27
28    pub(crate) async fn _get(&self, page: &str) -> Result<Vec<SenderIDItem>, errors::HttpError> {
29        let mut params = HashMap::new();
30        params.insert("api_key", self.api_key);
31        params.insert("page", page);
32
33        let response = self.client.get("sender-id", Some(params), None).await?;
34
35        let sender_id_item = response_or_error_text_async!(response, SenderIDResponse);
36
37        Ok(sender_id_item.data)
38    }
39
40    /// Fetch your organization's sender ID's.
41    ///
42    /// ## Examples
43    ///
44    /// ```rust
45    /// use termii_rust::async_impl::rest::termii;
46    ///
47    /// let client = termii::Termii::new("Your API key");
48    ///
49    /// let sender_id = client.switch.sender_id.get(Some("1")).await.unwrap();
50    ///
51    /// println!("{:?}", sender_id);
52    /// ```
53    /// ### The above code is limited by termii's pagination. You can get all your sender ID's with the **all** function like such
54    ///
55    /// ```rust
56    /// let sender_ids = client.switch.sender_id.all().await.unwrap();
57    /// ```
58    pub async fn get(&self, page: Option<&str>) -> Result<Vec<SenderIDItem>, errors::HttpError> {
59        let page = page.unwrap_or("1");
60        let sender_id_items = self._get(page).await?;
61        Ok(sender_id_items)
62    }
63
64    /// Request a sender ID.
65    ///
66    /// ## Examples
67    ///
68    /// ```rust
69    /// use termii_rust::{async_impl::rest::termii, common::switch::sender_id::SenderIDRequest};
70    ///
71    /// let client = termii::Termii::new("Your API key");
72    ///
73    /// let sender_id_payload = SenderIDRequest::new(
74    ///     "OrgNewsLetter".to_string(),
75    ///     "New offering available.".to_string(),
76    ///     "Your org name".to_string(),
77    /// );
78    ///
79    /// let sender_id_response = client
80    ///     .switch
81    ///     .sender_id
82    ///     .request(sender_id_payload)
83    ///     .await
84    ///     .unwrap();
85    ///
86    /// println!("{:?}", sender_id_response);
87    /// ```
88    pub async fn request(
89        &self,
90        mut payload: SenderIDRequest,
91    ) -> Result<SenderIDRequestResponse, errors::HttpError> {
92        payload.set_api_key(self.api_key);
93
94        let response = self
95            .client
96            .post("sender-id/request", None, None, Some(payload))
97            .await?;
98
99        let sender_id_request_response =
100            response_or_error_text_async!(response, SenderIDRequestResponse);
101
102        Ok(sender_id_request_response)
103    }
104}
105
106#[async_trait]
107impl pagination::PaginatedResourceAsync for SenderID<'_> {
108    type Item = SenderIDItem;
109
110    async fn _get(&self, page: &str) -> Result<Vec<Self::Item>, errors::HttpError> {
111        SenderID::_get(self, page).await
112    }
113}