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((r.items, r.pagination.pages, r.pagination.current))
23 })
24 .await
25 }
26
27 pub async fn list_page(
29 &self,
30 page: i32,
31 per_page: Option<i32>,
32 ) -> Result<Page<models::ServiceNumber>, ManagerError> {
33 let cfg = self.cfg.get().await?;
34 let cfg = cfg.as_ref();
35 fetch_page(&self.retry, map_manager_err, || async move {
36 let r = api::list_service_numbers(cfg, Some(page), per_page).await?;
37 Ok((
38 r.items,
39 r.pagination.pages,
40 r.pagination.current,
41 Some(r.pagination.total),
42 ))
43 })
44 .await
45 }
46
47 pub async fn get(&self, id: &str) -> Result<models::ServiceNumberItemResponse, ManagerError> {
49 let cfg = self.cfg.get().await?;
50 let cfg = cfg.as_ref();
51 with_retry(&self.retry, true, || api::get_service_number(cfg, id))
52 .await
53 .map_err(map_manager_err)
54 }
55
56 pub async fn add_tags(
58 &self,
59 id: &str,
60 tags: Vec<String>,
61 ) -> Result<models::ServiceNumberItemResponse, ManagerError> {
62 let cfg = self.cfg.get().await?;
63 let cfg = cfg.as_ref();
64 let body = models::AddNumberTagsRequest { tags };
65 with_retry(&self.retry, false, || {
66 manager_api::add_tags_to_number(cfg, id, body.clone())
67 })
68 .await
69 .map_err(map_manager_err)
70 }
71
72 pub async fn update(
74 &self,
75 id: &str,
76 body: std::collections::HashMap<String, serde_json::Value>,
77 ) -> Result<models::ServiceNumberItemResponse, ManagerError> {
78 let cfg = self.cfg.get().await?;
79 let cfg = cfg.as_ref();
80 with_retry(&self.retry, false, || {
81 api::update_service_number(cfg, id, body.clone())
82 })
83 .await
84 .map_err(map_manager_err)
85 }
86}