box_open_sdk/managers/
transfer.rs1use crate::internal::path_escape;
4use crate::runtime::{self, Error};
5
6#[derive(Clone, Debug, Default)]
8pub struct TransferTransferFoldersOptions {
9 pub fields: Option<Vec<String>>,
10 pub notify: Option<bool>,
11}
12
13pub struct TransferManager {
15 session: std::sync::Arc<runtime::Client>,
16}
17
18impl TransferManager {
19 pub(crate) fn new(session: std::sync::Arc<runtime::Client>) -> Self {
20 Self { session }
21 }
22
23 pub async fn transfer_folders(
24 &self,
25 user_id: String,
26 body: crate::models::schemas::UserFolder0UpdateRequest,
27 opts: Option<TransferTransferFoldersOptions>,
28 ) -> Result<crate::models::schemas::FolderFull, Error> {
29 let mut url = self.session.base_url("api");
30 url.push_str("/users");
31 url.push('/');
32 let seg = path_escape(&user_id);
33 url.push_str(&seg);
34 url.push_str("/folders");
35 url.push_str("/0");
36 let mut req = self.session.new_request("PUT", &url);
37 let opts = opts.unwrap_or_default();
38 if let Some(value) = opts.fields {
39 req = runtime::with_query(req, "fields", &value.join(","));
40 }
41 if let Some(value) = opts.notify {
42 req = runtime::with_query(req, "notify", &value.to_string());
43 }
44 let payload = serde_json::to_vec(&body)?;
45 req = runtime::with_json_body(req, &payload);
46 let resp = self.session.fetch(req).await?;
47 let data = runtime::response_bytes(&resp)?;
48 Ok(serde_json::from_slice(&data)?)
49 }
50}