Skip to main content

babelforce_manager_sdk/resources/
babeldesk.rs

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