babelforce_manager_sdk/resources/
numbers.rs1use crate::error::{map_manager_err, ManagerError};
2use crate::gen::manager::apis::configuration::Configuration;
3use crate::gen::manager::apis::{manager_api, service_number_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 NumbersResource {
11 pub(crate) cfg: SharedCfg<Configuration>,
12 pub(crate) retry: RetryPolicy,
13}
14
15impl NumbersResource {
16 pub async fn list_all(&self) -> Result<Vec<models::ServiceNumber>, 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_service_numbers(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 list_page(
33 &self,
34 page: i32,
35 per_page: Option<i32>,
36 ) -> Result<Page<models::ServiceNumber>, ManagerError> {
37 let cfg = self.cfg.get().await?;
38 let cfg = cfg.as_ref();
39 fetch_page(&self.retry, map_manager_err, || async move {
40 let r = api::list_service_numbers(cfg, Some(page), per_page).await?;
41 Ok((
42 r.items,
43 r.pagination.pages.unwrap_or(1),
44 r.pagination.current.unwrap_or(1),
45 r.pagination.total,
46 ))
47 })
48 .await
49 }
50
51 pub async fn get(&self, id: &str) -> Result<models::ServiceNumberItemResponse, ManagerError> {
53 let cfg = self.cfg.get().await?;
54 let cfg = cfg.as_ref();
55 with_retry(&self.retry, true, || api::get_service_number(cfg, id))
56 .await
57 .map_err(map_manager_err)
58 }
59
60 pub async fn add_tags(
62 &self,
63 id: &str,
64 tags: Vec<String>,
65 ) -> Result<models::ServiceNumberItemResponse, ManagerError> {
66 let cfg = self.cfg.get().await?;
67 let cfg = cfg.as_ref();
68 let body = models::AddNumberTagsRequest { tags };
69 with_retry(&self.retry, false, || {
70 manager_api::add_tags_to_number(cfg, id, body.clone())
71 })
72 .await
73 .map_err(map_manager_err)
74 }
75
76 pub async fn update(
78 &self,
79 id: &str,
80 body: std::collections::HashMap<String, serde_json::Value>,
81 ) -> Result<models::ServiceNumberItemResponse, ManagerError> {
82 let cfg = self.cfg.get().await?;
83 let cfg = cfg.as_ref();
84 with_retry(&self.retry, false, || {
85 api::update_service_number(cfg, id, body.clone())
86 })
87 .await
88 .map_err(map_manager_err)
89 }
90}