Skip to main content

box_open_sdk/managers/
trashed_items.rs

1// Code generated by box-gantry. DO NOT EDIT.
2
3use crate::runtime::{self, Error};
4
5/// Optional parameters for [`TrashedItemsManager::list_folder_trash_items`].
6#[derive(Clone, Debug, Default)]
7pub struct TrashedItemsListFolderTrashItemsOptions {
8    pub fields: Option<Vec<String>>,
9    pub limit: Option<i64>,
10    pub offset: Option<i64>,
11    pub usemarker: Option<bool>,
12    pub marker: Option<String>,
13    pub direction: Option<crate::models::schemas::OrderDirection>,
14    pub sort: Option<crate::models::schemas::GetFolderTrashItemsSort>,
15}
16
17/// Async paginator over [`TrashedItemsManager::list_folder_trash_items`], yielding one `crate::models::schemas::Item`
18/// per item across pages (FR-7.3).
19pub struct TrashedItemsListFolderTrashItemsPaginator {
20    manager: TrashedItemsManager,
21    options: TrashedItemsListFolderTrashItemsOptions,
22    buffer: std::vec::IntoIter<crate::models::schemas::Item>,
23    done: bool,
24}
25
26impl TrashedItemsListFolderTrashItemsPaginator {
27    /// The next item, advancing pages as needed; `None` at the end.
28    /// An error is yielded once, then iteration stops.
29    pub async fn next(&mut self) -> Option<Result<crate::models::schemas::Item, Error>> {
30        loop {
31            if let Some(item) = self.buffer.next() {
32                return Some(Ok(item));
33            }
34            if self.done {
35                return None;
36            }
37            let page = match self
38                .manager
39                .list_folder_trash_items_page(Some(self.options.clone()))
40                .await
41            {
42                Ok(page) => page,
43                Err(err) => {
44                    self.done = true;
45                    return Some(Err(err));
46                }
47            };
48            self.buffer = page.entries.unwrap_or_default().into_iter();
49            match page.next_marker.flatten() {
50                Some(cursor) if !cursor.is_empty() => self.options.marker = Some(cursor),
51                _ => self.done = true,
52            }
53        }
54    }
55}
56
57/// Operations for the "trashed_items" API area.
58pub struct TrashedItemsManager {
59    session: std::sync::Arc<runtime::Client>,
60}
61
62impl TrashedItemsManager {
63    pub(crate) fn new(session: std::sync::Arc<runtime::Client>) -> Self {
64        Self { session }
65    }
66
67    async fn list_folder_trash_items_page(
68        &self,
69        opts: Option<TrashedItemsListFolderTrashItemsOptions>,
70    ) -> Result<crate::models::schemas::Items, Error> {
71        let mut url = self.session.base_url("api");
72        url.push_str("/folders");
73        url.push_str("/trash");
74        url.push_str("/items");
75        let mut req = self.session.new_request("GET", &url);
76        let opts = opts.unwrap_or_default();
77        if let Some(value) = opts.fields {
78            req = runtime::with_query(req, "fields", &value.join(","));
79        }
80        if let Some(value) = opts.limit {
81            req = runtime::with_query(req, "limit", &value.to_string());
82        }
83        if let Some(value) = opts.offset {
84            req = runtime::with_query(req, "offset", &value.to_string());
85        }
86        if let Some(value) = opts.usemarker {
87            req = runtime::with_query(req, "usemarker", &value.to_string());
88        }
89        if let Some(value) = opts.marker {
90            req = runtime::with_query(req, "marker", &value);
91        }
92        if let Some(value) = opts.direction {
93            req = runtime::with_query(req, "direction", &value.0);
94        }
95        if let Some(value) = opts.sort {
96            req = runtime::with_query(req, "sort", &value.0);
97        }
98        let resp = self.session.fetch(req).await?;
99        let data = runtime::response_bytes(&resp)?;
100        Ok(serde_json::from_slice(&data)?)
101    }
102
103    /// Iterate every `crate::models::schemas::Item` across pages, threading the cursor.
104    pub fn list_folder_trash_items(
105        &self,
106        opts: Option<TrashedItemsListFolderTrashItemsOptions>,
107    ) -> TrashedItemsListFolderTrashItemsPaginator {
108        TrashedItemsListFolderTrashItemsPaginator {
109            manager: TrashedItemsManager::new(self.session.clone()),
110            options: opts.unwrap_or_default(),
111            buffer: Vec::new().into_iter(),
112            done: false,
113        }
114    }
115}