Skip to main content

box_open_sdk/managers/
metadata_templates.rs

1// Code generated by box-gantry. DO NOT EDIT.
2
3use crate::internal::path_escape;
4use crate::runtime::{self, Error};
5
6/// Optional parameters for [`MetadataTemplatesManager::list`].
7#[derive(Clone, Debug, Default)]
8pub struct MetadataTemplatesListOptions {
9    pub marker: Option<String>,
10    pub limit: Option<i64>,
11}
12
13/// Optional parameters for [`MetadataTemplatesManager::list_global`].
14#[derive(Clone, Debug, Default)]
15pub struct MetadataTemplatesListGlobalOptions {
16    pub marker: Option<String>,
17    pub limit: Option<i64>,
18}
19
20/// Optional parameters for [`MetadataTemplatesManager::list_enterprise`].
21#[derive(Clone, Debug, Default)]
22pub struct MetadataTemplatesListEnterpriseOptions {
23    pub marker: Option<String>,
24    pub limit: Option<i64>,
25}
26
27/// Async paginator over [`MetadataTemplatesManager::list`], yielding one `crate::models::schemas::MetadataTemplate`
28/// per item across pages (FR-7.3).
29pub struct MetadataTemplatesListPaginator {
30    manager: MetadataTemplatesManager,
31    metadata_instance_id: String,
32    options: MetadataTemplatesListOptions,
33    buffer: std::vec::IntoIter<crate::models::schemas::MetadataTemplate>,
34    done: bool,
35}
36
37impl MetadataTemplatesListPaginator {
38    /// The next item, advancing pages as needed; `None` at the end.
39    /// An error is yielded once, then iteration stops.
40    pub async fn next(
41        &mut self,
42    ) -> Option<Result<crate::models::schemas::MetadataTemplate, Error>> {
43        loop {
44            if let Some(item) = self.buffer.next() {
45                return Some(Ok(item));
46            }
47            if self.done {
48                return None;
49            }
50            let page = match self
51                .manager
52                .list_page(
53                    self.metadata_instance_id.clone(),
54                    Some(self.options.clone()),
55                )
56                .await
57            {
58                Ok(page) => page,
59                Err(err) => {
60                    self.done = true;
61                    return Some(Err(err));
62                }
63            };
64            self.buffer = page.entries.unwrap_or_default().into_iter();
65            match page.next_marker.flatten() {
66                Some(cursor) if !cursor.is_empty() => self.options.marker = Some(cursor),
67                _ => self.done = true,
68            }
69        }
70    }
71}
72
73/// Async paginator over [`MetadataTemplatesManager::list_global`], yielding one `crate::models::schemas::MetadataTemplate`
74/// per item across pages (FR-7.3).
75pub struct MetadataTemplatesListGlobalPaginator {
76    manager: MetadataTemplatesManager,
77    options: MetadataTemplatesListGlobalOptions,
78    buffer: std::vec::IntoIter<crate::models::schemas::MetadataTemplate>,
79    done: bool,
80}
81
82impl MetadataTemplatesListGlobalPaginator {
83    /// The next item, advancing pages as needed; `None` at the end.
84    /// An error is yielded once, then iteration stops.
85    pub async fn next(
86        &mut self,
87    ) -> Option<Result<crate::models::schemas::MetadataTemplate, Error>> {
88        loop {
89            if let Some(item) = self.buffer.next() {
90                return Some(Ok(item));
91            }
92            if self.done {
93                return None;
94            }
95            let page = match self
96                .manager
97                .list_global_page(Some(self.options.clone()))
98                .await
99            {
100                Ok(page) => page,
101                Err(err) => {
102                    self.done = true;
103                    return Some(Err(err));
104                }
105            };
106            self.buffer = page.entries.unwrap_or_default().into_iter();
107            match page.next_marker.flatten() {
108                Some(cursor) if !cursor.is_empty() => self.options.marker = Some(cursor),
109                _ => self.done = true,
110            }
111        }
112    }
113}
114
115/// Async paginator over [`MetadataTemplatesManager::list_enterprise`], yielding one `crate::models::schemas::MetadataTemplate`
116/// per item across pages (FR-7.3).
117pub struct MetadataTemplatesListEnterprisePaginator {
118    manager: MetadataTemplatesManager,
119    options: MetadataTemplatesListEnterpriseOptions,
120    buffer: std::vec::IntoIter<crate::models::schemas::MetadataTemplate>,
121    done: bool,
122}
123
124impl MetadataTemplatesListEnterprisePaginator {
125    /// The next item, advancing pages as needed; `None` at the end.
126    /// An error is yielded once, then iteration stops.
127    pub async fn next(
128        &mut self,
129    ) -> Option<Result<crate::models::schemas::MetadataTemplate, Error>> {
130        loop {
131            if let Some(item) = self.buffer.next() {
132                return Some(Ok(item));
133            }
134            if self.done {
135                return None;
136            }
137            let page = match self
138                .manager
139                .list_enterprise_page(Some(self.options.clone()))
140                .await
141            {
142                Ok(page) => page,
143                Err(err) => {
144                    self.done = true;
145                    return Some(Err(err));
146                }
147            };
148            self.buffer = page.entries.unwrap_or_default().into_iter();
149            match page.next_marker.flatten() {
150                Some(cursor) if !cursor.is_empty() => self.options.marker = Some(cursor),
151                _ => self.done = true,
152            }
153        }
154    }
155}
156
157/// Operations for the "metadata_templates" API area.
158pub struct MetadataTemplatesManager {
159    session: std::sync::Arc<runtime::Client>,
160}
161
162impl MetadataTemplatesManager {
163    pub(crate) fn new(session: std::sync::Arc<runtime::Client>) -> Self {
164        Self { session }
165    }
166
167    async fn list_page(
168        &self,
169        metadata_instance_id: String,
170        opts: Option<MetadataTemplatesListOptions>,
171    ) -> Result<crate::models::schemas::MetadataTemplates, Error> {
172        let mut url = self.session.base_url("api");
173        url.push_str("/metadata_templates");
174        let mut req = self.session.new_request("GET", &url);
175        req = runtime::with_query(req, "metadata_instance_id", &metadata_instance_id);
176        let opts = opts.unwrap_or_default();
177        if let Some(value) = opts.marker {
178            req = runtime::with_query(req, "marker", &value);
179        }
180        if let Some(value) = opts.limit {
181            req = runtime::with_query(req, "limit", &value.to_string());
182        }
183        let resp = self.session.fetch(req).await?;
184        let data = runtime::response_bytes(&resp)?;
185        Ok(serde_json::from_slice(&data)?)
186    }
187
188    /// Iterate every `crate::models::schemas::MetadataTemplate` across pages, threading the cursor.
189    pub fn list(
190        &self,
191        metadata_instance_id: String,
192        opts: Option<MetadataTemplatesListOptions>,
193    ) -> MetadataTemplatesListPaginator {
194        MetadataTemplatesListPaginator {
195            manager: MetadataTemplatesManager::new(self.session.clone()),
196            metadata_instance_id,
197            options: opts.unwrap_or_default(),
198            buffer: Vec::new().into_iter(),
199            done: false,
200        }
201    }
202
203    pub async fn get_schema(
204        &self,
205        scope: crate::models::schemas::GetFileIdMetadataIdScope,
206        template_key: String,
207    ) -> Result<crate::models::schemas::MetadataTemplate, Error> {
208        let mut url = self.session.base_url("api");
209        url.push_str("/metadata_templates");
210        url.push('/');
211        let seg = path_escape(&scope.0);
212        url.push_str(&seg);
213        url.push('/');
214        let seg = path_escape(&template_key);
215        url.push_str(&seg);
216        url.push_str("/schema");
217        let req = self.session.new_request("GET", &url);
218        let resp = self.session.fetch(req).await?;
219        let data = runtime::response_bytes(&resp)?;
220        Ok(serde_json::from_slice(&data)?)
221    }
222
223    pub async fn update_schema(
224        &self,
225        scope: crate::models::schemas::GetFileIdMetadataIdScope,
226        template_key: String,
227        body: Vec<crate::models::schemas::UpdateSchemaRequest>,
228    ) -> Result<crate::models::schemas::MetadataTemplate, Error> {
229        let mut url = self.session.base_url("api");
230        url.push_str("/metadata_templates");
231        url.push('/');
232        let seg = path_escape(&scope.0);
233        url.push_str(&seg);
234        url.push('/');
235        let seg = path_escape(&template_key);
236        url.push_str(&seg);
237        url.push_str("/schema");
238        let mut req = self.session.new_request("PUT", &url);
239        let payload = serde_json::to_vec(&body)?;
240        req = runtime::with_json_body(req, &payload);
241        let resp = self.session.fetch(req).await?;
242        let data = runtime::response_bytes(&resp)?;
243        Ok(serde_json::from_slice(&data)?)
244    }
245
246    pub async fn delete_schema(
247        &self,
248        scope: crate::models::schemas::GetFileIdMetadataIdScope,
249        template_key: String,
250    ) -> Result<(), Error> {
251        let mut url = self.session.base_url("api");
252        url.push_str("/metadata_templates");
253        url.push('/');
254        let seg = path_escape(&scope.0);
255        url.push_str(&seg);
256        url.push('/');
257        let seg = path_escape(&template_key);
258        url.push_str(&seg);
259        url.push_str("/schema");
260        let req = self.session.new_request("DELETE", &url);
261        let _ = self.session.fetch(req).await?;
262        Ok(())
263    }
264
265    pub async fn get(
266        &self,
267        template_id: String,
268    ) -> Result<crate::models::schemas::MetadataTemplate, Error> {
269        let mut url = self.session.base_url("api");
270        url.push_str("/metadata_templates");
271        url.push('/');
272        let seg = path_escape(&template_id);
273        url.push_str(&seg);
274        let req = self.session.new_request("GET", &url);
275        let resp = self.session.fetch(req).await?;
276        let data = runtime::response_bytes(&resp)?;
277        Ok(serde_json::from_slice(&data)?)
278    }
279
280    async fn list_global_page(
281        &self,
282        opts: Option<MetadataTemplatesListGlobalOptions>,
283    ) -> Result<crate::models::schemas::MetadataTemplates, Error> {
284        let mut url = self.session.base_url("api");
285        url.push_str("/metadata_templates");
286        url.push_str("/global");
287        let mut req = self.session.new_request("GET", &url);
288        let opts = opts.unwrap_or_default();
289        if let Some(value) = opts.marker {
290            req = runtime::with_query(req, "marker", &value);
291        }
292        if let Some(value) = opts.limit {
293            req = runtime::with_query(req, "limit", &value.to_string());
294        }
295        let resp = self.session.fetch(req).await?;
296        let data = runtime::response_bytes(&resp)?;
297        Ok(serde_json::from_slice(&data)?)
298    }
299
300    /// Iterate every `crate::models::schemas::MetadataTemplate` across pages, threading the cursor.
301    pub fn list_global(
302        &self,
303        opts: Option<MetadataTemplatesListGlobalOptions>,
304    ) -> MetadataTemplatesListGlobalPaginator {
305        MetadataTemplatesListGlobalPaginator {
306            manager: MetadataTemplatesManager::new(self.session.clone()),
307            options: opts.unwrap_or_default(),
308            buffer: Vec::new().into_iter(),
309            done: false,
310        }
311    }
312
313    async fn list_enterprise_page(
314        &self,
315        opts: Option<MetadataTemplatesListEnterpriseOptions>,
316    ) -> Result<crate::models::schemas::MetadataTemplates, Error> {
317        let mut url = self.session.base_url("api");
318        url.push_str("/metadata_templates");
319        url.push_str("/enterprise");
320        let mut req = self.session.new_request("GET", &url);
321        let opts = opts.unwrap_or_default();
322        if let Some(value) = opts.marker {
323            req = runtime::with_query(req, "marker", &value);
324        }
325        if let Some(value) = opts.limit {
326            req = runtime::with_query(req, "limit", &value.to_string());
327        }
328        let resp = self.session.fetch(req).await?;
329        let data = runtime::response_bytes(&resp)?;
330        Ok(serde_json::from_slice(&data)?)
331    }
332
333    /// Iterate every `crate::models::schemas::MetadataTemplate` across pages, threading the cursor.
334    pub fn list_enterprise(
335        &self,
336        opts: Option<MetadataTemplatesListEnterpriseOptions>,
337    ) -> MetadataTemplatesListEnterprisePaginator {
338        MetadataTemplatesListEnterprisePaginator {
339            manager: MetadataTemplatesManager::new(self.session.clone()),
340            options: opts.unwrap_or_default(),
341            buffer: Vec::new().into_iter(),
342            done: false,
343        }
344    }
345
346    pub async fn create_schema(
347        &self,
348        body: crate::models::schemas::CreateSchemaRequest,
349    ) -> Result<crate::models::schemas::MetadataTemplate, Error> {
350        let mut url = self.session.base_url("api");
351        url.push_str("/metadata_templates");
352        url.push_str("/schema");
353        let mut req = self.session.new_request("POST", &url);
354        let payload = serde_json::to_vec(&body)?;
355        req = runtime::with_json_body(req, &payload);
356        let resp = self.session.fetch(req).await?;
357        let data = runtime::response_bytes(&resp)?;
358        Ok(serde_json::from_slice(&data)?)
359    }
360}