Skip to main content

box_open_sdk/managers/
groups.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 [`GroupsManager::list`].
7#[derive(Clone, Debug, Default)]
8pub struct GroupsListOptions {
9    pub filter_term: Option<String>,
10    pub fields: Option<Vec<String>>,
11    pub limit: Option<i64>,
12    pub offset: Option<i64>,
13}
14
15/// Optional parameters for [`GroupsManager::create`].
16#[derive(Clone, Debug, Default)]
17pub struct GroupsCreateOptions {
18    pub fields: Option<Vec<String>>,
19}
20
21/// Optional parameters for [`GroupsManager::get`].
22#[derive(Clone, Debug, Default)]
23pub struct GroupsGetOptions {
24    pub fields: Option<Vec<String>>,
25}
26
27/// Optional parameters for [`GroupsManager::update`].
28#[derive(Clone, Debug, Default)]
29pub struct GroupsUpdateOptions {
30    pub fields: Option<Vec<String>>,
31}
32
33/// Async paginator over [`GroupsManager::list`], yielding one `crate::models::schemas::GroupFull`
34/// per item across pages (FR-7.3).
35pub struct GroupsListPaginator {
36    manager: GroupsManager,
37    options: GroupsListOptions,
38    buffer: std::vec::IntoIter<crate::models::schemas::GroupFull>,
39    done: bool,
40}
41
42impl GroupsListPaginator {
43    /// The next item, advancing pages as needed; `None` at the end.
44    /// An error is yielded once, then iteration stops.
45    pub async fn next(&mut self) -> Option<Result<crate::models::schemas::GroupFull, Error>> {
46        loop {
47            if let Some(item) = self.buffer.next() {
48                return Some(Ok(item));
49            }
50            if self.done {
51                return None;
52            }
53            let page = match self.manager.list_page(Some(self.options.clone())).await {
54                Ok(page) => page,
55                Err(err) => {
56                    self.done = true;
57                    return Some(Err(err));
58                }
59            };
60            let items = page.entries.unwrap_or_default();
61            if items.is_empty() {
62                self.done = true;
63            } else {
64                let next = self.options.offset.unwrap_or(0) + items.len() as i64;
65                self.options.offset = Some(next);
66            }
67            self.buffer = items.into_iter();
68        }
69    }
70}
71
72/// Operations for the "groups" API area.
73pub struct GroupsManager {
74    session: std::sync::Arc<runtime::Client>,
75}
76
77impl GroupsManager {
78    pub(crate) fn new(session: std::sync::Arc<runtime::Client>) -> Self {
79        Self { session }
80    }
81
82    async fn list_page(
83        &self,
84        opts: Option<GroupsListOptions>,
85    ) -> Result<crate::models::schemas::Groups, Error> {
86        let mut url = self.session.base_url("api");
87        url.push_str("/groups");
88        let mut req = self.session.new_request("GET", &url);
89        let opts = opts.unwrap_or_default();
90        if let Some(value) = opts.filter_term {
91            req = runtime::with_query(req, "filter_term", &value);
92        }
93        if let Some(value) = opts.fields {
94            req = runtime::with_query(req, "fields", &value.join(","));
95        }
96        if let Some(value) = opts.limit {
97            req = runtime::with_query(req, "limit", &value.to_string());
98        }
99        if let Some(value) = opts.offset {
100            req = runtime::with_query(req, "offset", &value.to_string());
101        }
102        let resp = self.session.fetch(req).await?;
103        let data = runtime::response_bytes(&resp)?;
104        Ok(serde_json::from_slice(&data)?)
105    }
106
107    /// Iterate every `crate::models::schemas::GroupFull` across pages, threading the cursor.
108    pub fn list(&self, opts: Option<GroupsListOptions>) -> GroupsListPaginator {
109        GroupsListPaginator {
110            manager: GroupsManager::new(self.session.clone()),
111            options: opts.unwrap_or_default(),
112            buffer: Vec::new().into_iter(),
113            done: false,
114        }
115    }
116
117    pub async fn create(
118        &self,
119        body: crate::models::schemas::CreateGroupRequest,
120        opts: Option<GroupsCreateOptions>,
121    ) -> Result<crate::models::schemas::GroupFull, Error> {
122        let mut url = self.session.base_url("api");
123        url.push_str("/groups");
124        let mut req = self.session.new_request("POST", &url);
125        let opts = opts.unwrap_or_default();
126        if let Some(value) = opts.fields {
127            req = runtime::with_query(req, "fields", &value.join(","));
128        }
129        let payload = serde_json::to_vec(&body)?;
130        req = runtime::with_json_body(req, &payload);
131        let resp = self.session.fetch(req).await?;
132        let data = runtime::response_bytes(&resp)?;
133        Ok(serde_json::from_slice(&data)?)
134    }
135
136    pub async fn get(
137        &self,
138        group_id: String,
139        opts: Option<GroupsGetOptions>,
140    ) -> Result<crate::models::schemas::GroupFull, Error> {
141        let mut url = self.session.base_url("api");
142        url.push_str("/groups");
143        url.push('/');
144        let seg = path_escape(&group_id);
145        url.push_str(&seg);
146        let mut req = self.session.new_request("GET", &url);
147        let opts = opts.unwrap_or_default();
148        if let Some(value) = opts.fields {
149            req = runtime::with_query(req, "fields", &value.join(","));
150        }
151        let resp = self.session.fetch(req).await?;
152        let data = runtime::response_bytes(&resp)?;
153        Ok(serde_json::from_slice(&data)?)
154    }
155
156    pub async fn update(
157        &self,
158        group_id: String,
159        body: crate::models::schemas::UpdateGroupRequest,
160        opts: Option<GroupsUpdateOptions>,
161    ) -> Result<crate::models::schemas::GroupFull, Error> {
162        let mut url = self.session.base_url("api");
163        url.push_str("/groups");
164        url.push('/');
165        let seg = path_escape(&group_id);
166        url.push_str(&seg);
167        let mut req = self.session.new_request("PUT", &url);
168        let opts = opts.unwrap_or_default();
169        if let Some(value) = opts.fields {
170            req = runtime::with_query(req, "fields", &value.join(","));
171        }
172        let payload = serde_json::to_vec(&body)?;
173        req = runtime::with_json_body(req, &payload);
174        let resp = self.session.fetch(req).await?;
175        let data = runtime::response_bytes(&resp)?;
176        Ok(serde_json::from_slice(&data)?)
177    }
178
179    pub async fn delete(&self, group_id: String) -> Result<(), Error> {
180        let mut url = self.session.base_url("api");
181        url.push_str("/groups");
182        url.push('/');
183        let seg = path_escape(&group_id);
184        url.push_str(&seg);
185        let req = self.session.new_request("DELETE", &url);
186        let _ = self.session.fetch(req).await?;
187        Ok(())
188    }
189}