openlark_workflow/v2/task/
tasklists.rs1use crate::common::{api_endpoints::TaskApiV2, api_utils::*};
6use openlark_core::{
7 api::{ApiRequest, ApiResponseTrait, ResponseFormat},
8 config::Config,
9 validate_required, SDKResult,
10};
11use serde::{Deserialize, Serialize};
12use std::sync::Arc;
13
14#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
16pub struct TaskTasklistItem {
17 pub tasklist_guid: String,
19 pub tasklist_name: String,
21 #[serde(default)]
23 pub section_guid: Option<String>,
24 #[serde(default)]
26 pub section_name: Option<String>,
27}
28
29#[derive(Debug, Clone, Deserialize)]
31pub struct GetTaskTasklistsResponse {
32 #[serde(default)]
34 pub items: Vec<TaskTasklistItem>,
35 #[serde(default)]
37 pub total: Option<i32>,
38}
39
40#[derive(Debug, Clone)]
42pub struct GetTaskTasklistsRequest {
43 config: Arc<Config>,
45 task_guid: String,
47}
48
49impl GetTaskTasklistsRequest {
50 pub fn new(config: Arc<Config>, task_guid: impl Into<String>) -> Self {
51 Self {
52 config,
53 task_guid: task_guid.into(),
54 }
55 }
56
57 pub async fn execute(self) -> SDKResult<GetTaskTasklistsResponse> {
59 self.execute_with_options(openlark_core::req_option::RequestOption::default())
60 .await
61 }
62
63 pub async fn execute_with_options(
65 self,
66 option: openlark_core::req_option::RequestOption,
67 ) -> SDKResult<GetTaskTasklistsResponse> {
68 validate_required!(self.task_guid.trim(), "任务GUID不能为空");
70
71 let api_endpoint = TaskApiV2::TaskGetTasklists(self.task_guid.clone());
72 let request = ApiRequest::<GetTaskTasklistsResponse>::get(api_endpoint.to_url());
73
74 let response =
75 openlark_core::http::Transport::request(request, &self.config, Some(option)).await?;
76 extract_response_data(response, "列取任务所在清单")
77 }
78}
79
80impl ApiResponseTrait for GetTaskTasklistsResponse {
81 fn data_format() -> ResponseFormat {
82 ResponseFormat::Data
83 }
84}
85
86#[cfg(test)]
87#[allow(unused_imports)]
88mod tests {
89 use std::sync::Arc;
90
91 use super::*;
92
93 #[test]
94 fn test_get_task_tasklists_request() {
95 let config = openlark_core::config::Config::builder()
96 .app_id("test")
97 .app_secret("test")
98 .build();
99
100 let request = GetTaskTasklistsRequest::new(Arc::new(config), "task_123");
101
102 assert_eq!(request.task_guid, "task_123");
103 }
104
105 #[test]
106 fn test_task_get_tasklists_api_v2_url() {
107 let endpoint = TaskApiV2::TaskGetTasklists("task_123".to_string());
108 assert_eq!(
109 endpoint.to_url(),
110 "/open-apis/task/v2/tasks/task_123/tasklists"
111 );
112 }
113}