cloudreve_sdk_api/api/
workflow.rs1use crate::client::{Client, RequestOptions};
2use crate::error::ApiResult;
3use crate::models::workflow::*;
4use async_trait::async_trait;
5
6#[async_trait]
8pub trait WorkflowApi {
9 async fn create_archive(&self, request: &ArchiveWorkflowService) -> ApiResult<TaskResponse>;
11
12 async fn extract_archive(&self, request: &ArchiveWorkflowService) -> ApiResult<TaskResponse>;
14
15 async fn relocate(&self, request: &RelocateWorkflowService) -> ApiResult<TaskResponse>;
17
18 async fn remote_download(&self, request: &DownloadWorkflowService) -> ApiResult<TaskResponse>;
20
21 async fn import(&self, request: &ImportWorkflowService) -> ApiResult<TaskResponse>;
23
24 async fn list_tasks(&self, params: &ListTaskService) -> ApiResult<TaskListResponse>;
26
27 async fn get_task(&self, task_id: &str) -> ApiResult<TaskResponse>;
29
30 async fn cancel_task(&self, task_id: &str) -> ApiResult<()>;
32
33 async fn delete_task(&self, task_id: &str) -> ApiResult<()>;
35
36 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(¶ms.category).unwrap_or_default().trim_matches('"')),
82 ];
83
84 if let Some(next_page_token) = ¶ms.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