box_open_sdk/managers/
folder_metadata.rs1use crate::internal::path_escape;
4use crate::runtime::{self, Error};
5
6#[derive(Clone, Debug, Default)]
8pub struct FolderMetadataListFolderMetadataOptions {
9 pub view: Option<String>,
10}
11
12pub struct FolderMetadataManager {
14 session: std::sync::Arc<runtime::Client>,
15}
16
17impl FolderMetadataManager {
18 pub(crate) fn new(session: std::sync::Arc<runtime::Client>) -> Self {
19 Self { session }
20 }
21
22 pub async fn list_folder_metadata(
23 &self,
24 folder_id: String,
25 opts: Option<FolderMetadataListFolderMetadataOptions>,
26 ) -> Result<crate::models::schemas::Metadatas, Error> {
27 let mut url = self.session.base_url("api");
28 url.push_str("/folders");
29 url.push('/');
30 let seg = path_escape(&folder_id);
31 url.push_str(&seg);
32 url.push_str("/metadata");
33 let mut req = self.session.new_request("GET", &url);
34 let opts = opts.unwrap_or_default();
35 if let Some(value) = opts.view {
36 req = runtime::with_query(req, "view", &value);
37 }
38 let resp = self.session.fetch(req).await?;
39 let data = runtime::response_bytes(&resp)?;
40 Ok(serde_json::from_slice(&data)?)
41 }
42
43 pub async fn get_folder_metadata(
44 &self,
45 folder_id: String,
46 scope: crate::models::schemas::GetFileIdMetadataIdScope,
47 template_key: String,
48 ) -> Result<crate::models::schemas::MetadataFull, Error> {
49 let mut url = self.session.base_url("api");
50 url.push_str("/folders");
51 url.push('/');
52 let seg = path_escape(&folder_id);
53 url.push_str(&seg);
54 url.push_str("/metadata");
55 url.push('/');
56 let seg = path_escape(&scope.0);
57 url.push_str(&seg);
58 url.push('/');
59 let seg = path_escape(&template_key);
60 url.push_str(&seg);
61 let req = self.session.new_request("GET", &url);
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 update_folder_metadata(
68 &self,
69 folder_id: String,
70 scope: crate::models::schemas::GetFileIdMetadataIdScope,
71 template_key: String,
72 body: Vec<crate::models::schemas::UpdateFileMetadataRequest>,
73 ) -> Result<crate::models::schemas::MetadataFull, Error> {
74 let mut url = self.session.base_url("api");
75 url.push_str("/folders");
76 url.push('/');
77 let seg = path_escape(&folder_id);
78 url.push_str(&seg);
79 url.push_str("/metadata");
80 url.push('/');
81 let seg = path_escape(&scope.0);
82 url.push_str(&seg);
83 url.push('/');
84 let seg = path_escape(&template_key);
85 url.push_str(&seg);
86 let mut req = self.session.new_request("PUT", &url);
87 let payload = serde_json::to_vec(&body)?;
88 req = runtime::with_json_body(req, &payload);
89 let resp = self.session.fetch(req).await?;
90 let data = runtime::response_bytes(&resp)?;
91 Ok(serde_json::from_slice(&data)?)
92 }
93
94 pub async fn create_folder_metadata(
95 &self,
96 folder_id: String,
97 scope: crate::models::schemas::GetFileIdMetadataIdScope,
98 template_key: String,
99 body: std::collections::HashMap<String, serde_json::Value>,
100 ) -> Result<crate::models::schemas::MetadataFull, Error> {
101 let mut url = self.session.base_url("api");
102 url.push_str("/folders");
103 url.push('/');
104 let seg = path_escape(&folder_id);
105 url.push_str(&seg);
106 url.push_str("/metadata");
107 url.push('/');
108 let seg = path_escape(&scope.0);
109 url.push_str(&seg);
110 url.push('/');
111 let seg = path_escape(&template_key);
112 url.push_str(&seg);
113 let mut req = self.session.new_request("POST", &url);
114 let payload = serde_json::to_vec(&body)?;
115 req = runtime::with_json_body(req, &payload);
116 let resp = self.session.fetch(req).await?;
117 let data = runtime::response_bytes(&resp)?;
118 Ok(serde_json::from_slice(&data)?)
119 }
120
121 pub async fn delete_folder_metadata(
122 &self,
123 folder_id: String,
124 scope: crate::models::schemas::GetFileIdMetadataIdScope,
125 template_key: String,
126 ) -> Result<(), Error> {
127 let mut url = self.session.base_url("api");
128 url.push_str("/folders");
129 url.push('/');
130 let seg = path_escape(&folder_id);
131 url.push_str(&seg);
132 url.push_str("/metadata");
133 url.push('/');
134 let seg = path_escape(&scope.0);
135 url.push_str(&seg);
136 url.push('/');
137 let seg = path_escape(&template_key);
138 url.push_str(&seg);
139 let req = self.session.new_request("DELETE", &url);
140 let _ = self.session.fetch(req).await?;
141 Ok(())
142 }
143}