babelforce_manager_sdk/resources/
sms.rs1use crate::error::{map_manager_err, ManagerError};
2use crate::gen::manager::apis::configuration::Configuration;
3use crate::gen::manager::apis::sms_api as api;
4use crate::gen::manager::models;
5use crate::http::{collect_all, fetch_page, Page};
6use crate::retry::{with_retry, RetryPolicy};
7use crate::token::SharedCfg;
8
9pub struct SmsResource {
11 pub(crate) cfg: SharedCfg<Configuration>,
12 pub(crate) retry: RetryPolicy,
13}
14
15impl SmsResource {
16 pub async fn list_all(&self) -> Result<Vec<models::Sms>, ManagerError> {
18 let cfg = self.cfg.get().await?;
19 let cfg = cfg.as_ref();
20 collect_all(&self.retry, map_manager_err, |page| async move {
21 let r = api::list_smss(cfg, Some(page), None).await?;
22 Ok((
23 r.items,
24 r.pagination.pages.unwrap_or(1),
25 r.pagination.current.unwrap_or(1),
26 ))
27 })
28 .await
29 }
30
31 pub async fn get(&self, id: &str) -> Result<models::SmsItemResponse, ManagerError> {
33 let cfg = self.cfg.get().await?;
34 let cfg = cfg.as_ref();
35 with_retry(&self.retry, true, || api::get_sms(cfg, id))
36 .await
37 .map_err(map_manager_err)
38 }
39
40 pub async fn send(
42 &self,
43 body: models::SmsSendRequest,
44 ) -> Result<models::SmsItemResponse, ManagerError> {
45 let cfg = self.cfg.get().await?;
46 let cfg = cfg.as_ref();
47 with_retry(&self.retry, false, || api::send_sms(cfg, body.clone()))
48 .await
49 .map_err(map_manager_err)
50 }
51
52 pub async fn delete(&self, id: &str) -> Result<models::SmsItemResponse, ManagerError> {
54 let cfg = self.cfg.get().await?;
55 let cfg = cfg.as_ref();
56 with_retry(&self.retry, false, || api::delete_sms(cfg, id))
57 .await
58 .map_err(map_manager_err)
59 }
60
61 pub async fn report_page(
63 &self,
64 page: i32,
65 per_page: Option<i32>,
66 ) -> Result<Page<models::Sms>, ManagerError> {
67 let cfg = self.cfg.get().await?;
68 let cfg = cfg.as_ref();
69 fetch_page(&self.retry, map_manager_err, || async move {
70 let r = api::report_sms(cfg, Some(page), per_page).await?;
71 Ok((
72 r.items,
73 r.pagination.pages.unwrap_or(1),
74 r.pagination.current.unwrap_or(1),
75 r.pagination.total,
76 ))
77 })
78 .await
79 }
80
81 pub async fn report(&self) -> Result<Vec<models::Sms>, ManagerError> {
83 let cfg = self.cfg.get().await?;
84 let cfg = cfg.as_ref();
85 collect_all(&self.retry, map_manager_err, |page| async move {
86 let r = api::report_sms(cfg, Some(page), None).await?;
87 Ok((
88 r.items,
89 r.pagination.pages.unwrap_or(1),
90 r.pagination.current.unwrap_or(1),
91 ))
92 })
93 .await
94 }
95
96 pub async fn test_inbound(
98 &self,
99 body: models::SmsSendRequest,
100 ) -> Result<models::SmsItemResponse, ManagerError> {
101 let cfg = self.cfg.get().await?;
102 let cfg = cfg.as_ref();
103 with_retry(&self.retry, false, || {
104 api::test_inbound_sms(cfg, body.clone())
105 })
106 .await
107 .map_err(map_manager_err)
108 }
109}