termii_rust/blocking/rest/switch/
sender_id.rs

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