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