Skip to main content

babelforce_manager_sdk/resources/
babeldesk.rs

1use crate::error::{map_manager_err, ManagerError};
2use crate::gen::manager::apis::configuration::Configuration;
3use crate::gen::manager::apis::manager_api;
4use crate::gen::manager::apis::{babeldesk_api as api, babeldesk_widget_api as widget_api};
5use crate::gen::manager::models;
6use crate::http::collect_all;
7use crate::retry::{with_retry, RetryPolicy};
8use crate::token::SharedCfg;
9
10/// Babeldesk dashboards — `/api/v2/babeldesk`, with a nested `widgets` sub-resource.
11pub struct BabeldeskResource {
12    pub(crate) cfg: SharedCfg<Configuration>,
13    pub(crate) retry: RetryPolicy,
14    /// Babeldesk widgets — `/api/v2/babeldesk/widgets`.
15    pub widgets: BabeldeskWidgetsResource,
16}
17
18impl BabeldeskResource {
19    /// List all babeldesk dashboards (auto-paginated).
20    pub async fn list_all(&self) -> Result<Vec<models::Babeldesk>, ManagerError> {
21        let cfg = self.cfg.get().await?;
22        let cfg = cfg.as_ref();
23        collect_all(&self.retry, map_manager_err, |page| async move {
24            let r = api::list_babeldesks(cfg, Some(page), None).await?;
25            Ok((r.items, r.pagination.pages, r.pagination.current))
26        })
27        .await
28    }
29
30    /// Get the widget settings for a widget type.
31    pub async fn widget_settings(
32        &self,
33        r#type: &str,
34    ) -> Result<models::WidgetSettingsResponse, ManagerError> {
35        let cfg = self.cfg.get().await?;
36        let cfg = cfg.as_ref();
37        with_retry(&self.retry, true, || {
38            manager_api::get_widget_settings(cfg, r#type)
39        })
40        .await
41        .map_err(map_manager_err)
42    }
43
44    /// Create a babeldesk dashboard.
45    pub async fn create(
46        &self,
47        body: models::RestCreateBabeldesk,
48    ) -> Result<models::BabeldeskItemResponse, ManagerError> {
49        let cfg = self.cfg.get().await?;
50        let cfg = cfg.as_ref();
51        with_retry(&self.retry, false, || {
52            api::create_babeldesk(cfg, body.clone())
53        })
54        .await
55        .map_err(map_manager_err)
56    }
57
58    /// Get a babeldesk dashboard by id.
59    pub async fn get(&self, id: &str) -> Result<models::BabeldeskItemResponse, ManagerError> {
60        let cfg = self.cfg.get().await?;
61        let cfg = cfg.as_ref();
62        with_retry(&self.retry, true, || api::get_babeldesk(cfg, id))
63            .await
64            .map_err(map_manager_err)
65    }
66
67    /// Update a babeldesk dashboard.
68    pub async fn update(
69        &self,
70        id: &str,
71        body: models::RestUpdateBabeldesk,
72    ) -> Result<models::BabeldeskItemResponse, ManagerError> {
73        let cfg = self.cfg.get().await?;
74        let cfg = cfg.as_ref();
75        with_retry(&self.retry, false, || {
76            api::update_babeldesk(cfg, id, body.clone())
77        })
78        .await
79        .map_err(map_manager_err)
80    }
81
82    /// Delete a babeldesk dashboard.
83    pub async fn delete(&self, id: &str) -> Result<(), ManagerError> {
84        let cfg = self.cfg.get().await?;
85        let cfg = cfg.as_ref();
86        with_retry(&self.retry, false, || api::delete_babeldesk(cfg, id))
87            .await
88            .map_err(map_manager_err)?;
89        Ok(())
90    }
91}
92
93/// Babeldesk widgets — `/api/v2/babeldesk/widgets`.
94pub struct BabeldeskWidgetsResource {
95    pub(crate) cfg: SharedCfg<Configuration>,
96    pub(crate) retry: RetryPolicy,
97}
98
99impl BabeldeskWidgetsResource {
100    /// List all babeldesk widgets (auto-paginated).
101    pub async fn list_all(&self) -> Result<Vec<models::BabeldeskWidget>, ManagerError> {
102        let cfg = self.cfg.get().await?;
103        let cfg = cfg.as_ref();
104        collect_all(&self.retry, map_manager_err, |page| async move {
105            let r = widget_api::list_babeldesk_widgets(cfg, Some(page), None).await?;
106            Ok((r.items, r.pagination.pages, r.pagination.current))
107        })
108        .await
109    }
110
111    /// Create a babeldesk widget.
112    pub async fn create(
113        &self,
114        body: models::RestCreateBabeldeskWidget,
115    ) -> Result<models::BabeldeskWidgetItemResponse, ManagerError> {
116        let cfg = self.cfg.get().await?;
117        let cfg = cfg.as_ref();
118        with_retry(&self.retry, false, || {
119            widget_api::create_babeldesk_widget(cfg, body.clone())
120        })
121        .await
122        .map_err(map_manager_err)
123    }
124
125    /// Get a babeldesk widget by id.
126    pub async fn get(&self, id: &str) -> Result<models::BabeldeskWidgetItemResponse, ManagerError> {
127        let cfg = self.cfg.get().await?;
128        let cfg = cfg.as_ref();
129        with_retry(&self.retry, true, || {
130            widget_api::get_babeldesk_widget(cfg, id)
131        })
132        .await
133        .map_err(map_manager_err)
134    }
135
136    /// Update a babeldesk widget.
137    pub async fn update(
138        &self,
139        id: &str,
140        body: models::RestUpdateBabeldeskWidget,
141    ) -> Result<models::BabeldeskWidgetItemResponse, ManagerError> {
142        let cfg = self.cfg.get().await?;
143        let cfg = cfg.as_ref();
144        with_retry(&self.retry, false, || {
145            widget_api::update_babeldesk_widget(cfg, id, body.clone())
146        })
147        .await
148        .map_err(map_manager_err)
149    }
150
151    /// Delete a babeldesk widget.
152    pub async fn delete(&self, id: &str) -> Result<(), ManagerError> {
153        let cfg = self.cfg.get().await?;
154        let cfg = cfg.as_ref();
155        with_retry(&self.retry, false, || {
156            widget_api::delete_babeldesk_widget(cfg, id)
157        })
158        .await
159        .map_err(map_manager_err)?;
160        Ok(())
161    }
162}