openlark_workflow/v2/task/
remove_tasklist.rs1use crate::common::{api_endpoints::TaskApiV2, api_utils::*};
6use openlark_core::{
7 SDKResult,
8 api::{ApiRequest, ApiResponseTrait, ResponseFormat},
9 config::Config,
10 validate_required,
11};
12use serde::{Deserialize, Serialize};
13use std::sync::Arc;
14
15#[derive(Debug, Clone, Serialize, Default)]
17pub struct RemoveTasklistBody {
18 pub tasklist_guid: String,
20}
21
22#[derive(Debug, Clone, Deserialize)]
24pub struct RemoveTasklistResponse {
25 pub task_guid: String,
27 pub tasklist_guid: String,
29}
30
31#[derive(Debug, Clone)]
33pub struct RemoveTasklistRequest {
34 config: Arc<Config>,
36 task_guid: String,
38 body: RemoveTasklistBody,
40}
41
42impl RemoveTasklistRequest {
43 pub fn new(config: Arc<Config>, task_guid: impl Into<String>) -> Self {
45 Self {
46 config,
47 task_guid: task_guid.into(),
48 body: RemoveTasklistBody::default(),
49 }
50 }
51
52 pub fn tasklist_guid(mut self, tasklist_guid: impl Into<String>) -> Self {
54 self.body.tasklist_guid = tasklist_guid.into();
55 self
56 }
57
58 pub async fn execute(self) -> SDKResult<RemoveTasklistResponse> {
60 self.execute_with_options(openlark_core::req_option::RequestOption::default())
61 .await
62 }
63
64 pub async fn execute_with_options(
66 self,
67 option: openlark_core::req_option::RequestOption,
68 ) -> SDKResult<RemoveTasklistResponse> {
69 validate_required!(self.task_guid.trim(), "任务GUID不能为空");
71 validate_required!(self.body.tasklist_guid.trim(), "任务清单GUID不能为空");
72
73 let api_endpoint = TaskApiV2::TaskRemoveTasklist(self.task_guid.clone());
74 let mut request = ApiRequest::<RemoveTasklistResponse>::post(api_endpoint.to_url());
75
76 let request_body = &self.body;
77 request = request.body(serialize_params(request_body, "任务移出清单")?);
78
79 let response =
80 openlark_core::http::Transport::request(request, &self.config, Some(option)).await?;
81 extract_response_data(response, "任务移出清单")
82 }
83}
84
85impl ApiResponseTrait for RemoveTasklistResponse {
86 fn data_format() -> ResponseFormat {
87 ResponseFormat::Data
88 }
89}
90
91#[cfg(test)]
92#[allow(unused_imports)]
93mod tests {
94 use std::sync::Arc;
95
96 use super::*;
97
98 #[test]
99 fn test_remove_tasklist_builder() {
100 let config = Arc::new(
101 openlark_core::config::Config::builder()
102 .app_id("test")
103 .app_secret("test")
104 .build(),
105 );
106
107 let request = RemoveTasklistRequest::new(config, "task_123").tasklist_guid("tasklist_456");
108
109 assert_eq!(request.task_guid, "task_123");
110 assert_eq!(request.body.tasklist_guid, "tasklist_456");
111 }
112
113 #[test]
114 fn test_task_remove_tasklist_api_v2_url() {
115 let endpoint = TaskApiV2::TaskRemoveTasklist("task_123".to_string());
116 assert_eq!(
117 endpoint.to_url(),
118 "/open-apis/task/v2/tasks/task_123/remove_tasklist"
119 );
120 }
121}