cloudreve_api/api/v3/
site.rs

1//! Site-related API endpoints for Cloudreve API v3
2
3use crate::Error;
4use crate::VERSION;
5use crate::api::VersionInfo;
6use crate::api::v3::ApiV3Client;
7use crate::api::v3::models::*;
8
9impl ApiV3Client {
10    /// Get site configuration
11    pub async fn get_site_config(&self) -> Result<SiteConfig, Error> {
12        let response: ApiResponse<SiteConfig> = self.get("/site/config").await?;
13        match response.data {
14            Some(config) => Ok(config),
15            None => Err(Error::Api {
16                code: response.code,
17                message: response.msg,
18            }),
19        }
20    }
21
22    /// Get user storage information
23    pub async fn get_user_storage(&self) -> Result<StorageInfo, Error> {
24        let response: ApiResponse<StorageInfo> = self.get("/user/storage").await?;
25        match response.data {
26            Some(storage) => Ok(storage),
27            None => Err(Error::Api {
28                code: response.code,
29                message: response.msg,
30            }),
31        }
32    }
33
34    /// Ping the server and get server version
35    pub async fn ping(&self) -> Result<String, Error> {
36        let response: ApiResponse<String> = self.get("/site/ping").await?;
37        match response.data {
38            Some(version) => Ok(version),
39            None => Err(Error::Api {
40                code: response.code,
41                message: response.msg,
42            }),
43        }
44    }
45
46    /// Get API version information
47    pub async fn get_version(&self) -> Result<VersionInfo, Error> {
48        let server_version = self.ping().await.unwrap_or_else(|_| "unknown".to_string());
49        Ok(VersionInfo {
50            api_version: "v3".to_string(),
51            library_version: VERSION.to_string(),
52            server_version,
53        })
54    }
55
56    /// Get user settings
57    pub async fn get_user_settings(&self) -> Result<StorageInfo, Error> {
58        let response: ApiResponse<StorageInfo> = self.get("/user/setting").await?;
59        match response.data {
60            Some(settings) => Ok(settings),
61            None => Err(Error::Api {
62                code: response.code,
63                message: response.msg,
64            }),
65        }
66    }
67
68    /// Get task queue
69    pub async fn get_task_queue(&self) -> Result<Vec<Aria2Task>, Error> {
70        let response: ApiResponse<Vec<Aria2Task>> = self.get("/user/setting/tasks").await?;
71        match response.data {
72            Some(tasks) => Ok(tasks),
73            None => Err(Error::Api {
74                code: response.code,
75                message: response.msg,
76            }),
77        }
78    }
79}