Skip to main content

cloudreve_api/api/v3/
directory.rs

1//! Directory-related API endpoints for Cloudreve API v3
2
3use crate::Error;
4use crate::api::v3::ApiV3Client;
5use crate::api::v3::models::*;
6
7impl ApiV3Client {
8    /// List directory contents
9    pub async fn list_directory(&self, path: &str) -> Result<DirectoryList, Error> {
10        // Normalize path: remove trailing slash unless it's the root directory
11        let normalized_path = if path.ends_with('/') && path != "/" {
12            &path[..path.len() - 1]
13        } else {
14            path
15        };
16        let encoded_path = urlencoding::encode(normalized_path);
17        let response: ApiResponse<DirectoryList> =
18            self.get(&format!("/directory{}", encoded_path)).await?;
19        match response.data {
20            Some(list) => Ok(list),
21            None => Err(Error::Api {
22                code: response.code,
23                message: response.msg,
24            }),
25        }
26    }
27
28    /// Create a directory
29    pub async fn create_directory(
30        &self,
31        request: &CreateDirectoryRequest<'_>,
32    ) -> Result<(), Error> {
33        let response: ApiResponse<()> = self.put("/directory", request).await?;
34        if response.code == 0 {
35            Ok(())
36        } else {
37            Err(Error::Api {
38                code: response.code,
39                message: response.msg,
40            })
41        }
42    }
43}