Skip to main content

openlark_workflow/v2/task/
remove_tasklist.rs

1//! 任务移出清单
2//!
3//! docPath: https://open.feishu.cn/document/server-docs/docs/task-v2/task-remove_tasklist/create
4
5use 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/// 任务移出清单请求体
16#[derive(Debug, Clone, Serialize, Default)]
17pub struct RemoveTasklistBody {
18    /// 任务清单 GUID
19    pub tasklist_guid: String,
20}
21
22/// 任务移出清单响应
23#[derive(Debug, Clone, Deserialize)]
24pub struct RemoveTasklistResponse {
25    /// 任务 GUID
26    pub task_guid: String,
27    /// 任务清单 GUID
28    pub tasklist_guid: String,
29}
30
31/// 任务移出清单请求
32#[derive(Debug, Clone)]
33pub struct RemoveTasklistRequest {
34    /// 配置信息
35    config: Arc<Config>,
36    /// 任务 GUID
37    task_guid: String,
38    /// 请求体
39    body: RemoveTasklistBody,
40}
41
42impl RemoveTasklistRequest {
43    /// 创建新的请求构建器。
44    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    /// 设置任务清单 GUID
53    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    /// 执行请求
59    pub async fn execute(self) -> SDKResult<RemoveTasklistResponse> {
60        self.execute_with_options(openlark_core::req_option::RequestOption::default())
61            .await
62    }
63
64    /// 执行请求(带选项)
65    pub async fn execute_with_options(
66        self,
67        option: openlark_core::req_option::RequestOption,
68    ) -> SDKResult<RemoveTasklistResponse> {
69        // 验证必填字段
70        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}