openlark_workflow/v2/task/
tasklists.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, Deserialize, PartialEq)]
17pub struct TaskTasklistItem {
18 pub tasklist_guid: String,
20 pub tasklist_name: String,
22 #[serde(default)]
24 pub section_guid: Option<String>,
25 #[serde(default)]
27 pub section_name: Option<String>,
28}
29
30#[derive(Debug, Clone, Deserialize)]
32pub struct GetTaskTasklistsResponse {
33 #[serde(default)]
35 pub items: Vec<TaskTasklistItem>,
36 #[serde(default)]
38 pub total: Option<i32>,
39}
40
41#[derive(Debug, Clone)]
43pub struct GetTaskTasklistsRequest {
44 config: Arc<Config>,
46 task_guid: String,
48}
49
50impl GetTaskTasklistsRequest {
51 pub fn new(config: Arc<Config>, task_guid: impl Into<String>) -> Self {
53 Self {
54 config,
55 task_guid: task_guid.into(),
56 }
57 }
58
59 pub async fn execute(self) -> SDKResult<GetTaskTasklistsResponse> {
61 self.execute_with_options(openlark_core::req_option::RequestOption::default())
62 .await
63 }
64
65 pub async fn execute_with_options(
67 self,
68 option: openlark_core::req_option::RequestOption,
69 ) -> SDKResult<GetTaskTasklistsResponse> {
70 validate_required!(self.task_guid.trim(), "任务GUID不能为空");
72
73 let api_endpoint = TaskApiV2::TaskGetTasklists(self.task_guid.clone());
74 let request = ApiRequest::<GetTaskTasklistsResponse>::get(api_endpoint.to_url());
75
76 let response =
77 openlark_core::http::Transport::request(request, &self.config, Some(option)).await?;
78 extract_response_data(response, "列取任务所在清单")
79 }
80}
81
82impl ApiResponseTrait for GetTaskTasklistsResponse {
83 fn data_format() -> ResponseFormat {
84 ResponseFormat::Data
85 }
86}
87
88#[cfg(test)]
89#[allow(unused_imports)]
90mod tests {
91 use std::sync::Arc;
92
93 use super::*;
94
95 #[test]
96 fn test_get_task_tasklists_request() {
97 let config = openlark_core::config::Config::builder()
98 .app_id("test")
99 .app_secret("test")
100 .build();
101
102 let request = GetTaskTasklistsRequest::new(Arc::new(config), "task_123");
103
104 assert_eq!(request.task_guid, "task_123");
105 }
106
107 #[test]
108 fn test_task_get_tasklists_api_v2_url() {
109 let endpoint = TaskApiV2::TaskGetTasklists("task_123".to_string());
110 assert_eq!(
111 endpoint.to_url(),
112 "/open-apis/task/v2/tasks/task_123/tasklists"
113 );
114 }
115}