Skip to main content

box_open_sdk/managers/
users.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 [`UsersManager::list`].
7#[derive(Clone, Debug, Default)]
8pub struct UsersListOptions {
9    pub filter_term: Option<String>,
10    pub user_type: Option<crate::models::schemas::GetUserType>,
11    pub external_app_user_id: Option<String>,
12    pub fields: Option<Vec<String>>,
13    pub offset: Option<i64>,
14    pub limit: Option<i64>,
15    pub usemarker: Option<bool>,
16    pub marker: Option<String>,
17}
18
19/// Optional parameters for [`UsersManager::create`].
20#[derive(Clone, Debug, Default)]
21pub struct UsersCreateOptions {
22    pub fields: Option<Vec<String>>,
23}
24
25/// Optional parameters for [`UsersManager::get_me`].
26#[derive(Clone, Debug, Default)]
27pub struct UsersGetMeOptions {
28    pub fields: Option<Vec<String>>,
29}
30
31/// Optional parameters for [`UsersManager::get`].
32#[derive(Clone, Debug, Default)]
33pub struct UsersGetOptions {
34    pub fields: Option<Vec<String>>,
35}
36
37/// Optional parameters for [`UsersManager::update`].
38#[derive(Clone, Debug, Default)]
39pub struct UsersUpdateOptions {
40    pub fields: Option<Vec<String>>,
41}
42
43/// Optional parameters for [`UsersManager::delete`].
44#[derive(Clone, Debug, Default)]
45pub struct UsersDeleteOptions {
46    pub notify: Option<bool>,
47    pub force: Option<bool>,
48}
49
50/// Async paginator over [`UsersManager::list`], yielding one `crate::models::schemas::UserFull`
51/// per item across pages (FR-7.3).
52pub struct UsersListPaginator {
53    manager: UsersManager,
54    options: UsersListOptions,
55    buffer: std::vec::IntoIter<crate::models::schemas::UserFull>,
56    done: bool,
57}
58
59impl UsersListPaginator {
60    /// The next item, advancing pages as needed; `None` at the end.
61    /// An error is yielded once, then iteration stops.
62    pub async fn next(&mut self) -> Option<Result<crate::models::schemas::UserFull, Error>> {
63        loop {
64            if let Some(item) = self.buffer.next() {
65                return Some(Ok(item));
66            }
67            if self.done {
68                return None;
69            }
70            let page = match self.manager.list_page(Some(self.options.clone())).await {
71                Ok(page) => page,
72                Err(err) => {
73                    self.done = true;
74                    return Some(Err(err));
75                }
76            };
77            self.buffer = page.entries.unwrap_or_default().into_iter();
78            match page.next_marker.flatten() {
79                Some(cursor) if !cursor.is_empty() => self.options.marker = Some(cursor),
80                _ => self.done = true,
81            }
82        }
83    }
84}
85
86/// Operations for the "users" API area.
87pub struct UsersManager {
88    session: std::sync::Arc<runtime::Client>,
89}
90
91impl UsersManager {
92    pub(crate) fn new(session: std::sync::Arc<runtime::Client>) -> Self {
93        Self { session }
94    }
95
96    async fn list_page(
97        &self,
98        opts: Option<UsersListOptions>,
99    ) -> Result<crate::models::schemas::Users, Error> {
100        let mut url = self.session.base_url("api");
101        url.push_str("/users");
102        let mut req = self.session.new_request("GET", &url);
103        let opts = opts.unwrap_or_default();
104        if let Some(value) = opts.filter_term {
105            req = runtime::with_query(req, "filter_term", &value);
106        }
107        if let Some(value) = opts.user_type {
108            req = runtime::with_query(req, "user_type", &value.0);
109        }
110        if let Some(value) = opts.external_app_user_id {
111            req = runtime::with_query(req, "external_app_user_id", &value);
112        }
113        if let Some(value) = opts.fields {
114            req = runtime::with_query(req, "fields", &value.join(","));
115        }
116        if let Some(value) = opts.offset {
117            req = runtime::with_query(req, "offset", &value.to_string());
118        }
119        if let Some(value) = opts.limit {
120            req = runtime::with_query(req, "limit", &value.to_string());
121        }
122        if let Some(value) = opts.usemarker {
123            req = runtime::with_query(req, "usemarker", &value.to_string());
124        }
125        if let Some(value) = opts.marker {
126            req = runtime::with_query(req, "marker", &value);
127        }
128        let resp = self.session.fetch(req).await?;
129        let data = runtime::response_bytes(&resp)?;
130        Ok(serde_json::from_slice(&data)?)
131    }
132
133    /// Iterate every `crate::models::schemas::UserFull` across pages, threading the cursor.
134    pub fn list(&self, opts: Option<UsersListOptions>) -> UsersListPaginator {
135        UsersListPaginator {
136            manager: UsersManager::new(self.session.clone()),
137            options: opts.unwrap_or_default(),
138            buffer: Vec::new().into_iter(),
139            done: false,
140        }
141    }
142
143    pub async fn create(
144        &self,
145        body: crate::models::schemas::CreateUserRequest,
146        opts: Option<UsersCreateOptions>,
147    ) -> Result<crate::models::schemas::UserFull, Error> {
148        let mut url = self.session.base_url("api");
149        url.push_str("/users");
150        let mut req = self.session.new_request("POST", &url);
151        let opts = opts.unwrap_or_default();
152        if let Some(value) = opts.fields {
153            req = runtime::with_query(req, "fields", &value.join(","));
154        }
155        let payload = serde_json::to_vec(&body)?;
156        req = runtime::with_json_body(req, &payload);
157        let resp = self.session.fetch(req).await?;
158        let data = runtime::response_bytes(&resp)?;
159        Ok(serde_json::from_slice(&data)?)
160    }
161
162    pub async fn get_me(
163        &self,
164        opts: Option<UsersGetMeOptions>,
165    ) -> Result<crate::models::schemas::UserFull, Error> {
166        let mut url = self.session.base_url("api");
167        url.push_str("/users");
168        url.push_str("/me");
169        let mut req = self.session.new_request("GET", &url);
170        let opts = opts.unwrap_or_default();
171        if let Some(value) = opts.fields {
172            req = runtime::with_query(req, "fields", &value.join(","));
173        }
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 get(
180        &self,
181        user_id: String,
182        opts: Option<UsersGetOptions>,
183    ) -> Result<crate::models::schemas::UserFull, Error> {
184        let mut url = self.session.base_url("api");
185        url.push_str("/users");
186        url.push('/');
187        let seg = path_escape(&user_id);
188        url.push_str(&seg);
189        let mut req = self.session.new_request("GET", &url);
190        let opts = opts.unwrap_or_default();
191        if let Some(value) = opts.fields {
192            req = runtime::with_query(req, "fields", &value.join(","));
193        }
194        let resp = self.session.fetch(req).await?;
195        let data = runtime::response_bytes(&resp)?;
196        Ok(serde_json::from_slice(&data)?)
197    }
198
199    pub async fn update(
200        &self,
201        user_id: String,
202        body: crate::models::schemas::UpdateUserRequest,
203        opts: Option<UsersUpdateOptions>,
204    ) -> Result<crate::models::schemas::UserFull, Error> {
205        let mut url = self.session.base_url("api");
206        url.push_str("/users");
207        url.push('/');
208        let seg = path_escape(&user_id);
209        url.push_str(&seg);
210        let mut req = self.session.new_request("PUT", &url);
211        let opts = opts.unwrap_or_default();
212        if let Some(value) = opts.fields {
213            req = runtime::with_query(req, "fields", &value.join(","));
214        }
215        let payload = serde_json::to_vec(&body)?;
216        req = runtime::with_json_body(req, &payload);
217        let resp = self.session.fetch(req).await?;
218        let data = runtime::response_bytes(&resp)?;
219        Ok(serde_json::from_slice(&data)?)
220    }
221
222    pub async fn delete(
223        &self,
224        user_id: String,
225        opts: Option<UsersDeleteOptions>,
226    ) -> Result<(), Error> {
227        let mut url = self.session.base_url("api");
228        url.push_str("/users");
229        url.push('/');
230        let seg = path_escape(&user_id);
231        url.push_str(&seg);
232        let mut req = self.session.new_request("DELETE", &url);
233        let opts = opts.unwrap_or_default();
234        if let Some(value) = opts.notify {
235            req = runtime::with_query(req, "notify", &value.to_string());
236        }
237        if let Some(value) = opts.force {
238            req = runtime::with_query(req, "force", &value.to_string());
239        }
240        let _ = self.session.fetch(req).await?;
241        Ok(())
242    }
243}