Skip to main content

cloudreve_api/api/v4/
dav.rs

1//! WebDAV account management API endpoints for Cloudreve v4
2
3use crate::Error;
4use crate::api::v4::ApiV4Client;
5use crate::api::v4::models::*;
6use crate::api::v4::uri::path_to_uri;
7
8/// WebDAV account management methods
9impl ApiV4Client {
10    /// List WebDAV accounts
11    pub async fn list_dav_accounts(
12        &self,
13        page_size: u32,
14        next_page_token: Option<&str>,
15    ) -> Result<DavAccountsResponse, Error> {
16        let mut url = format!("/devices/dav?page_size={}", page_size);
17        if let Some(token) = next_page_token {
18            url.push_str(&format!("&next_page_token={}", token));
19        }
20
21        let response: ApiResponse<DavAccountsResponse> = self.get(&url).await?;
22        match response.data {
23            Some(data) => Ok(data),
24            None => Err(Error::InvalidResponse(format!(
25                "API returned no data for list_dav_accounts request: {:?}",
26                response
27            ))),
28        }
29    }
30
31    /// Create a new WebDAV account
32    pub async fn create_dav_account(
33        &self,
34        request: &CreateDavAccountRequest,
35    ) -> Result<DavAccount, Error> {
36        // Convert URI format internally
37        let uri = path_to_uri(&request.uri);
38        let converted_request = CreateDavAccountRequest {
39            uri,
40            name: request.name.clone(),
41            readonly: request.readonly,
42            proxy: request.proxy,
43            disable_sys_files: request.disable_sys_files,
44        };
45
46        let response: ApiResponse<DavAccount> =
47            self.put("/devices/dav", &converted_request).await?;
48        match response.data {
49            Some(data) => Ok(data),
50            None => Err(Error::InvalidResponse(format!(
51                "API returned no data for create_dav_account request: {:?}",
52                response
53            ))),
54        }
55    }
56
57    /// Update a WebDAV account
58    pub async fn update_dav_account(
59        &self,
60        id: &str,
61        request: &CreateDavAccountRequest,
62    ) -> Result<DavAccount, Error> {
63        // Convert URI format internally
64        let uri = path_to_uri(&request.uri);
65        let converted_request = CreateDavAccountRequest {
66            uri,
67            name: request.name.clone(),
68            readonly: request.readonly,
69            proxy: request.proxy,
70            disable_sys_files: request.disable_sys_files,
71        };
72
73        let response: ApiResponse<DavAccount> = self
74            .patch(&format!("/devices/dav/{}", id), &converted_request)
75            .await?;
76        match response.data {
77            Some(data) => Ok(data),
78            None => Err(Error::InvalidResponse(format!(
79                "API returned no data for update_dav_account request: {:?}",
80                response
81            ))),
82        }
83    }
84
85    /// Delete a WebDAV account
86    pub async fn delete_dav_account(&self, id: &str) -> Result<(), Error> {
87        let _: ApiResponse<()> = self.delete(&format!("/devices/dav/{}", id)).await?;
88        Ok(())
89    }
90}