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