cloudreve_api/api/v3/
object.rs

1//! Object-related API endpoints for Cloudreve API v3
2
3use crate::api::v3::models::*;
4use crate::api::v3::ApiV3Client;
5use crate::Error;
6
7impl ApiV3Client {
8    /// Get object (file/folder) property
9    pub async fn get_object_property(
10        &self,
11        id: &str,
12        is_folder: Option<bool>,
13        trace_root: Option<bool>,
14    ) -> Result<Property, Error> {
15        let mut query_params = Vec::new();
16        if let Some(folder) = is_folder {
17            query_params.push(format!("is_folder={}", folder));
18        }
19        if let Some(trace) = trace_root {
20            query_params.push(format!("trace_root={}", trace));
21        }
22
23        let endpoint = if query_params.is_empty() {
24            format!("/object/property/{}", id)
25        } else {
26            format!("/object/property/{}?{}", id, query_params.join("&"))
27        };
28
29        let response: ApiResponse<Property> = self.get(&endpoint).await?;
30        match response.data {
31            Some(property) => Ok(property),
32            None => Err(Error::Api {
33                code: response.code,
34                message: response.msg,
35            }),
36        }
37    }
38
39    /// Rename object
40    pub async fn rename_object(&self, request: &RenameObjectRequest<'_>) -> Result<(), Error> {
41        let response: ApiResponse<()> = self.post("/object/rename", request).await?;
42        if response.code == 0 {
43            Ok(())
44        } else {
45            Err(Error::Api {
46                code: response.code,
47                message: response.msg,
48            })
49        }
50    }
51
52    /// Move object
53    pub async fn move_object(&self, request: &MoveObjectRequest<'_>) -> Result<(), Error> {
54        let response: ApiResponse<()> = self.patch("/object", request).await?;
55        if response.code == 0 {
56            Ok(())
57        } else {
58            Err(Error::Api {
59                code: response.code,
60                message: response.msg,
61            })
62        }
63    }
64
65    /// Copy object
66    pub async fn copy_object(&self, request: &CopyObjectRequest<'_>) -> Result<(), Error> {
67        let response: ApiResponse<()> = self.post("/object/copy", request).await?;
68        if response.code == 0 {
69            Ok(())
70        } else {
71            Err(Error::Api {
72                code: response.code,
73                message: response.msg,
74            })
75        }
76    }
77
78    /// Delete object
79    pub async fn delete_object(&self, request: &DeleteObjectRequest<'_>) -> Result<(), Error> {
80        let response: ApiResponse<()> = self.delete_with_body("/object", request).await?;
81        if response.code == 0 {
82            Ok(())
83        } else {
84            Err(Error::Api {
85                code: response.code,
86                message: response.msg,
87            })
88        }
89    }
90}