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 openlark_core::http::Transport::request_typed(
80 request,
81 &self.config,
82 Some(option),
83 "任务移出清单",
84 )
85 .await
86 }
87}
88
89impl ApiResponseTrait for RemoveTasklistResponse {
90 fn data_format() -> ResponseFormat {
91 ResponseFormat::Data
92 }
93}
94
95#[cfg(test)]
96#[allow(unused_imports)]
97mod tests {
98 use std::sync::Arc;
99
100 use super::*;
101
102 #[test]
103 fn test_remove_tasklist_builder() {
104 let config = Arc::new(
105 openlark_core::config::Config::builder()
106 .app_id("test")
107 .app_secret("test")
108 .build(),
109 );
110
111 let request = RemoveTasklistRequest::new(config, "task_123").tasklist_guid("tasklist_456");
112
113 assert_eq!(request.task_guid, "task_123");
114 assert_eq!(request.body.tasklist_guid, "tasklist_456");
115 }
116
117 #[test]
118 fn test_task_remove_tasklist_api_v2_url() {
119 let endpoint = TaskApiV2::TaskRemoveTasklist("task_123".to_string());
120 assert_eq!(
121 endpoint.to_url(),
122 "/open-apis/task/v2/tasks/task_123/remove_tasklist"
123 );
124 }
125}