box_open_sdk/managers/
user_collaborations.rs1use crate::internal::path_escape;
4use crate::runtime::{self, Error};
5
6#[derive(Clone, Debug, Default)]
8pub struct UserCollaborationsGetCollaborationOptions {
9 pub fields: Option<Vec<String>>,
10}
11
12#[derive(Clone, Debug, Default)]
14pub struct UserCollaborationsCreateCollaborationsOptions {
15 pub fields: Option<Vec<String>>,
16 pub notify: Option<bool>,
17}
18
19pub struct UserCollaborationsManager {
21 session: std::sync::Arc<runtime::Client>,
22}
23
24impl UserCollaborationsManager {
25 pub(crate) fn new(session: std::sync::Arc<runtime::Client>) -> Self {
26 Self { session }
27 }
28
29 pub async fn get_collaboration(
30 &self,
31 collaboration_id: String,
32 opts: Option<UserCollaborationsGetCollaborationOptions>,
33 ) -> Result<crate::models::schemas::Collaboration, Error> {
34 let mut url = self.session.base_url("api");
35 url.push_str("/collaborations");
36 url.push('/');
37 let seg = path_escape(&collaboration_id);
38 url.push_str(&seg);
39 let mut req = self.session.new_request("GET", &url);
40 let opts = opts.unwrap_or_default();
41 if let Some(value) = opts.fields {
42 req = runtime::with_query(req, "fields", &value.join(","));
43 }
44 let resp = self.session.fetch(req).await?;
45 let data = runtime::response_bytes(&resp)?;
46 Ok(serde_json::from_slice(&data)?)
47 }
48
49 pub async fn update_collaboration(
50 &self,
51 collaboration_id: String,
52 body: crate::models::schemas::UpdateCollaborationRequest,
53 ) -> Result<crate::models::schemas::Collaboration, Error> {
54 let mut url = self.session.base_url("api");
55 url.push_str("/collaborations");
56 url.push('/');
57 let seg = path_escape(&collaboration_id);
58 url.push_str(&seg);
59 let mut req = self.session.new_request("PUT", &url);
60 let payload = serde_json::to_vec(&body)?;
61 req = runtime::with_json_body(req, &payload);
62 let resp = self.session.fetch(req).await?;
63 let data = runtime::response_bytes(&resp)?;
64 Ok(serde_json::from_slice(&data)?)
65 }
66
67 pub async fn delete_collaboration(&self, collaboration_id: String) -> Result<(), Error> {
68 let mut url = self.session.base_url("api");
69 url.push_str("/collaborations");
70 url.push('/');
71 let seg = path_escape(&collaboration_id);
72 url.push_str(&seg);
73 let req = self.session.new_request("DELETE", &url);
74 let _ = self.session.fetch(req).await?;
75 Ok(())
76 }
77
78 pub async fn create_collaborations(
79 &self,
80 body: crate::models::schemas::CreateCollaborationsRequest,
81 opts: Option<UserCollaborationsCreateCollaborationsOptions>,
82 ) -> Result<crate::models::schemas::Collaboration, Error> {
83 let mut url = self.session.base_url("api");
84 url.push_str("/collaborations");
85 let mut req = self.session.new_request("POST", &url);
86 let opts = opts.unwrap_or_default();
87 if let Some(value) = opts.fields {
88 req = runtime::with_query(req, "fields", &value.join(","));
89 }
90 if let Some(value) = opts.notify {
91 req = runtime::with_query(req, "notify", &value.to_string());
92 }
93 let payload = serde_json::to_vec(&body)?;
94 req = runtime::with_json_body(req, &payload);
95 let resp = self.session.fetch(req).await?;
96 let data = runtime::response_bytes(&resp)?;
97 Ok(serde_json::from_slice(&data)?)
98 }
99}