termii_rust/async_impl/rest/switch/
sender_id.rs1use 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 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 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}