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