Skip to main content

cloudreve_sdk_api/api/
workflow.rs

1use crate::client::{Client, RequestOptions};
2use crate::error::ApiResult;
3use crate::models::workflow::*;
4use async_trait::async_trait;
5
6/// Workflow and task API methods
7#[async_trait]
8pub trait WorkflowApi {
9    /// Create archive task
10    async fn create_archive(&self, request: &ArchiveWorkflowService) -> ApiResult<TaskResponse>;
11    
12    /// Extract archive task
13    async fn extract_archive(&self, request: &ArchiveWorkflowService) -> ApiResult<TaskResponse>;
14    
15    /// Relocate files task
16    async fn relocate(&self, request: &RelocateWorkflowService) -> ApiResult<TaskResponse>;
17    
18    /// Remote download task
19    async fn remote_download(&self, request: &DownloadWorkflowService) -> ApiResult<TaskResponse>;
20    
21    /// Import files task
22    async fn import(&self, request: &ImportWorkflowService) -> ApiResult<TaskResponse>;
23    
24    /// List tasks
25    async fn list_tasks(&self, params: &ListTaskService) -> ApiResult<TaskListResponse>;
26    
27    /// Get task by ID
28    async fn get_task(&self, task_id: &str) -> ApiResult<TaskResponse>;
29    
30    /// Cancel task
31    async fn cancel_task(&self, task_id: &str) -> ApiResult<()>;
32    
33    /// Delete task
34    async fn delete_task(&self, task_id: &str) -> ApiResult<()>;
35    
36    /// Set download files for a task
37    async fn set_download_files(&self, task_id: &str, request: &SetDownloadFilesService) -> ApiResult<()>;
38}
39
40#[async_trait]
41impl WorkflowApi for Client {
42    async fn create_archive(&self, request: &ArchiveWorkflowService) -> ApiResult<TaskResponse> {
43        self.post(
44            "/task/archive/create",
45            request,
46            RequestOptions::new().with_purchase_ticket(),
47        ).await
48    }
49    
50    async fn extract_archive(&self, request: &ArchiveWorkflowService) -> ApiResult<TaskResponse> {
51        self.post(
52            "/task/archive/extract",
53            request,
54            RequestOptions::new().with_purchase_ticket(),
55        ).await
56    }
57    
58    async fn relocate(&self, request: &RelocateWorkflowService) -> ApiResult<TaskResponse> {
59        self.post(
60            "/task/relocate",
61            request,
62            RequestOptions::new().with_purchase_ticket(),
63        ).await
64    }
65    
66    async fn remote_download(&self, request: &DownloadWorkflowService) -> ApiResult<TaskResponse> {
67        self.post(
68            "/task/download",
69            request,
70            RequestOptions::new().with_purchase_ticket(),
71        ).await
72    }
73    
74    async fn import(&self, request: &ImportWorkflowService) -> ApiResult<TaskResponse> {
75        self.post("/task/import", request, RequestOptions::new()).await
76    }
77    
78    async fn list_tasks(&self, params: &ListTaskService) -> ApiResult<TaskListResponse> {
79        let mut query_params = vec![
80            format!("page_size={}", params.page_size),
81            format!("category={}", serde_json::to_string(&params.category).unwrap_or_default().trim_matches('"')),
82        ];
83        
84        if let Some(next_page_token) = &params.next_page_token {
85            query_params.push(format!("next_page_token={}", next_page_token));
86        }
87        
88        let query = format!("?{}", query_params.join("&"));
89        
90        self.get(&format!("/task{}", query), RequestOptions::new()).await
91    }
92    
93    async fn get_task(&self, task_id: &str) -> ApiResult<TaskResponse> {
94        self.get(&format!("/task/{}", task_id), RequestOptions::new()).await
95    }
96    
97    async fn cancel_task(&self, task_id: &str) -> ApiResult<()> {
98        self.post::<(), ()>(
99            &format!("/task/{}/cancel", task_id),
100            &(),
101            RequestOptions::new(),
102        ).await
103    }
104    
105    async fn delete_task(&self, task_id: &str) -> ApiResult<()> {
106        self.delete(&format!("/task/{}", task_id), RequestOptions::new()).await
107    }
108    
109    async fn set_download_files(&self, task_id: &str, request: &SetDownloadFilesService) -> ApiResult<()> {
110        self.post(
111            &format!("/task/{}/files", task_id),
112            request,
113            RequestOptions::new(),
114        ).await
115    }
116}
117