open_lark/service/cloud_docs/drive/v1/
file_version.rs1use reqwest::Method;
2use serde::{Deserialize, Serialize};
3
4use crate::{
5 core::{
6 api_req::ApiRequest,
7 api_resp::{ApiResponseTrait, BaseResponse, ResponseFormat},
8 config::Config,
9 constants::AccessTokenType,
10 endpoints::cloud_docs::*,
11 http::Transport,
12 req_option::RequestOption,
13 SDKResult,
14 },
15 impl_executable_builder_owned,
16};
17
18pub struct FileVersionService {
20 config: Config,
21}
22
23impl FileVersionService {
24 pub fn new(config: Config) -> Self {
25 Self { config }
26 }
27
28 pub async fn create_version(
34 &self,
35 request: CreateVersionRequest,
36 option: Option<RequestOption>,
37 ) -> SDKResult<BaseResponse<CreateVersionRespData>> {
38 let mut api_req = ApiRequest {
39 http_method: Method::POST,
40 api_path: DRIVE_V1_FILE_VERSIONS.replace("{}", &request.file_token),
41 supported_access_token_types: vec![AccessTokenType::User, AccessTokenType::Tenant],
42 ..Default::default()
43 };
44
45 let body = serde_json::json!({
46 "name": request.name,
47 "obj_type": request.obj_type
48 });
49 api_req.body = serde_json::to_vec(&body)?;
50
51 let api_resp = Transport::request(api_req, &self.config, option).await?;
52 Ok(api_resp)
53 }
54
55 pub async fn delete_version(
61 &self,
62 request: DeleteVersionRequest,
63 option: Option<RequestOption>,
64 ) -> SDKResult<BaseResponse<DeleteVersionRespData>> {
65 let mut api_req = ApiRequest {
66 http_method: Method::DELETE,
67 api_path: DRIVE_V1_FILE_VERSION_GET
68 .replace("{}", &request.file_token)
69 .replace("{}", &request.version_id),
70 ..Default::default()
71 };
72 api_req.supported_access_token_types = vec![AccessTokenType::User, AccessTokenType::Tenant];
73
74 let api_resp = Transport::request(api_req, &self.config, option).await?;
75 Ok(api_resp)
76 }
77
78 pub async fn get_version(
84 &self,
85 request: GetVersionRequest,
86 option: Option<RequestOption>,
87 ) -> SDKResult<BaseResponse<GetVersionRespData>> {
88 let mut api_req = ApiRequest {
89 http_method: Method::GET,
90 api_path: DRIVE_V1_FILE_VERSION_GET
91 .replace("{}", &request.file_token)
92 .replace("{}", &request.version_id),
93 ..Default::default()
94 };
95 api_req.supported_access_token_types = vec![AccessTokenType::User, AccessTokenType::Tenant];
96
97 let api_resp = Transport::request(api_req, &self.config, option).await?;
98 Ok(api_resp)
99 }
100
101 pub async fn list_versions(
107 &self,
108 request: ListVersionsRequest,
109 option: Option<RequestOption>,
110 ) -> SDKResult<BaseResponse<ListVersionsRespData>> {
111 let mut api_req = ApiRequest {
112 http_method: Method::GET,
113 api_path: DRIVE_V1_FILE_VERSIONS.replace("{}", &request.file_token),
114 supported_access_token_types: vec![AccessTokenType::User, AccessTokenType::Tenant],
115 ..Default::default()
116 };
117
118 if let Some(page_token) = request.page_token {
120 api_req.query_params.insert("page_token", page_token);
121 }
122 if let Some(page_size) = request.page_size {
123 api_req
124 .query_params
125 .insert("page_size", page_size.to_string());
126 }
127
128 let api_resp = Transport::request(api_req, &self.config, option).await?;
129 Ok(api_resp)
130 }
131}
132
133#[derive(Debug, Clone, Serialize, Deserialize, Default)]
137pub struct CreateVersionRequest {
138 pub file_token: String,
140 pub name: String,
142 pub obj_type: String,
144}
145
146impl CreateVersionRequest {
147 pub fn builder() -> CreateVersionRequestBuilder {
148 CreateVersionRequestBuilder::default()
149 }
150
151 pub fn new(
152 file_token: impl Into<String>,
153 name: impl Into<String>,
154 obj_type: impl Into<String>,
155 ) -> Self {
156 Self {
157 file_token: file_token.into(),
158 name: name.into(),
159 obj_type: obj_type.into(),
160 }
161 }
162}
163
164#[derive(Default)]
166pub struct CreateVersionRequestBuilder {
167 request: CreateVersionRequest,
168}
169
170impl CreateVersionRequestBuilder {
171 pub fn file_token(mut self, file_token: impl Into<String>) -> Self {
172 self.request.file_token = file_token.into();
173 self
174 }
175
176 pub fn name(mut self, name: impl Into<String>) -> Self {
177 self.request.name = name.into();
178 self
179 }
180
181 pub fn obj_type(mut self, obj_type: impl Into<String>) -> Self {
182 self.request.obj_type = obj_type.into();
183 self
184 }
185
186 pub fn build(self) -> CreateVersionRequest {
187 self.request
188 }
189}
190
191impl_executable_builder_owned!(
192 CreateVersionRequestBuilder,
193 FileVersionService,
194 CreateVersionRequest,
195 BaseResponse<CreateVersionRespData>,
196 create_version
197);
198
199#[derive(Debug, Clone, Serialize, Deserialize)]
201pub struct CreateVersionRespData {
202 pub version_id: String,
204 pub name: String,
206 pub create_time: String,
208 pub creator_id: String,
210}
211
212impl ApiResponseTrait for CreateVersionRespData {
213 fn data_format() -> ResponseFormat {
214 ResponseFormat::Data
215 }
216}
217
218#[derive(Debug, Clone, Serialize, Deserialize, Default)]
220pub struct DeleteVersionRequest {
221 pub file_token: String,
223 pub version_id: String,
225}
226
227impl DeleteVersionRequest {
228 pub fn builder() -> DeleteVersionRequestBuilder {
229 DeleteVersionRequestBuilder::default()
230 }
231
232 pub fn new(file_token: impl Into<String>, version_id: impl Into<String>) -> Self {
233 Self {
234 file_token: file_token.into(),
235 version_id: version_id.into(),
236 }
237 }
238}
239
240#[derive(Default)]
242pub struct DeleteVersionRequestBuilder {
243 request: DeleteVersionRequest,
244}
245
246impl DeleteVersionRequestBuilder {
247 pub fn file_token(mut self, file_token: impl Into<String>) -> Self {
248 self.request.file_token = file_token.into();
249 self
250 }
251
252 pub fn version_id(mut self, version_id: impl Into<String>) -> Self {
253 self.request.version_id = version_id.into();
254 self
255 }
256
257 pub fn build(self) -> DeleteVersionRequest {
258 self.request
259 }
260}
261
262impl_executable_builder_owned!(
263 DeleteVersionRequestBuilder,
264 FileVersionService,
265 DeleteVersionRequest,
266 BaseResponse<DeleteVersionRespData>,
267 delete_version
268);
269
270#[derive(Debug, Clone, Serialize, Deserialize)]
272pub struct DeleteVersionRespData {
273 pub success: bool,
275}
276
277impl ApiResponseTrait for DeleteVersionRespData {
278 fn data_format() -> ResponseFormat {
279 ResponseFormat::Data
280 }
281}
282
283#[derive(Debug, Clone, Serialize, Deserialize, Default)]
285pub struct GetVersionRequest {
286 pub file_token: String,
288 pub version_id: String,
290}
291
292impl GetVersionRequest {
293 pub fn builder() -> GetVersionRequestBuilder {
294 GetVersionRequestBuilder::default()
295 }
296
297 pub fn new(file_token: impl Into<String>, version_id: impl Into<String>) -> Self {
298 Self {
299 file_token: file_token.into(),
300 version_id: version_id.into(),
301 }
302 }
303}
304
305#[derive(Default)]
307pub struct GetVersionRequestBuilder {
308 request: GetVersionRequest,
309}
310
311impl GetVersionRequestBuilder {
312 pub fn file_token(mut self, file_token: impl Into<String>) -> Self {
313 self.request.file_token = file_token.into();
314 self
315 }
316
317 pub fn version_id(mut self, version_id: impl Into<String>) -> Self {
318 self.request.version_id = version_id.into();
319 self
320 }
321
322 pub fn build(self) -> GetVersionRequest {
323 self.request
324 }
325}
326
327impl_executable_builder_owned!(
328 GetVersionRequestBuilder,
329 FileVersionService,
330 GetVersionRequest,
331 BaseResponse<GetVersionRespData>,
332 get_version
333);
334
335#[derive(Debug, Clone, Serialize, Deserialize)]
337pub struct GetVersionRespData {
338 pub version: FileVersion,
340}
341
342#[derive(Debug, Clone, Serialize, Deserialize, Default)]
344pub struct ListVersionsRequest {
345 pub file_token: String,
347 pub page_token: Option<String>,
349 pub page_size: Option<i32>,
351}
352
353impl ListVersionsRequest {
354 pub fn builder() -> ListVersionsRequestBuilder {
355 ListVersionsRequestBuilder::default()
356 }
357
358 pub fn new(file_token: impl Into<String>) -> Self {
359 Self {
360 file_token: file_token.into(),
361 page_token: None,
362 page_size: None,
363 }
364 }
365
366 pub fn with_page_token(mut self, page_token: impl Into<String>) -> Self {
367 self.page_token = Some(page_token.into());
368 self
369 }
370
371 pub fn with_page_size(mut self, page_size: i32) -> Self {
372 self.page_size = Some(page_size);
373 self
374 }
375}
376
377#[derive(Default)]
379pub struct ListVersionsRequestBuilder {
380 request: ListVersionsRequest,
381}
382
383impl ListVersionsRequestBuilder {
384 pub fn file_token(mut self, file_token: impl Into<String>) -> Self {
385 self.request.file_token = file_token.into();
386 self
387 }
388
389 pub fn page_token(mut self, page_token: impl Into<String>) -> Self {
390 self.request.page_token = Some(page_token.into());
391 self
392 }
393
394 pub fn page_size(mut self, page_size: i32) -> Self {
395 self.request.page_size = Some(page_size);
396 self
397 }
398
399 pub fn build(self) -> ListVersionsRequest {
400 self.request
401 }
402}
403
404impl_executable_builder_owned!(
405 ListVersionsRequestBuilder,
406 FileVersionService,
407 ListVersionsRequest,
408 BaseResponse<ListVersionsRespData>,
409 list_versions
410);
411
412#[derive(Debug, Clone, Serialize, Deserialize)]
414pub struct ListVersionsRespData {
415 pub has_more: bool,
417 pub page_token: Option<String>,
419 pub items: Vec<FileVersion>,
421}
422
423impl ApiResponseTrait for ListVersionsRespData {
424 fn data_format() -> ResponseFormat {
425 ResponseFormat::Data
426 }
427}
428
429impl ApiResponseTrait for GetVersionRespData {
430 fn data_format() -> ResponseFormat {
431 ResponseFormat::Data
432 }
433}
434
435#[derive(Debug, Clone, Serialize, Deserialize)]
437pub struct FileVersion {
438 pub version_id: String,
440 pub name: String,
442 pub obj_token: String,
444 pub obj_type: String,
446 pub creator_id: String,
448 pub create_time: String,
450 pub status: String,
452 pub parent_version_id: Option<String>,
454}