Skip to main content

babelforce_manager_sdk/resources/
routing.rs

1use crate::error::{map_manager_err, ManagerError};
2use crate::gen::manager::apis::configuration::Configuration;
3use crate::gen::manager::apis::routing_api as api;
4use crate::gen::manager::models;
5use crate::http::collect_all;
6use crate::retry::{with_retry, RetryPolicy};
7use crate::token::SharedCfg;
8
9/// Routing rules — `/api/v2/routings`.
10pub struct RoutingResource {
11    pub(crate) cfg: SharedCfg<Configuration>,
12    pub(crate) retry: RetryPolicy,
13}
14
15impl RoutingResource {
16    /// List all routings (auto-paginated).
17    pub async fn list_all(&self) -> Result<Vec<models::Routing>, 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_routings(cfg, Some(page), None).await?;
22            Ok((r.items, r.pagination.pages, r.pagination.current))
23        })
24        .await
25    }
26
27    /// Create a routing.
28    pub async fn create(
29        &self,
30        body: models::RestCreateRouting,
31    ) -> Result<models::RoutingItemResponse, ManagerError> {
32        let cfg = self.cfg.get().await?;
33        let cfg = cfg.as_ref();
34        with_retry(&self.retry, false, || {
35            api::create_routing(cfg, body.clone())
36        })
37        .await
38        .map_err(map_manager_err)
39    }
40
41    /// Get a routing by id.
42    pub async fn get(&self, id: &str) -> Result<models::RoutingItemResponse, ManagerError> {
43        let cfg = self.cfg.get().await?;
44        let cfg = cfg.as_ref();
45        with_retry(&self.retry, true, || api::get_routing(cfg, id))
46            .await
47            .map_err(map_manager_err)
48    }
49
50    /// Update a routing.
51    pub async fn update(
52        &self,
53        id: &str,
54        body: models::RestUpdateRouting,
55    ) -> Result<models::RoutingItemResponse, ManagerError> {
56        let cfg = self.cfg.get().await?;
57        let cfg = cfg.as_ref();
58        with_retry(&self.retry, false, || {
59            api::update_routing(cfg, id, body.clone())
60        })
61        .await
62        .map_err(map_manager_err)
63    }
64
65    /// Delete a routing.
66    pub async fn delete(&self, id: &str) -> Result<(), ManagerError> {
67        let cfg = self.cfg.get().await?;
68        let cfg = cfg.as_ref();
69        with_retry(&self.retry, false, || api::delete_routing(cfg, id))
70            .await
71            .map_err(map_manager_err)?;
72        Ok(())
73    }
74}