openlark_workflow/v2/task/
tasklists.rs1use crate::common::api_endpoints::TaskApiV2;
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 openlark_core::http::Transport::request_typed(
77 request,
78 &self.config,
79 Some(option),
80 "列取任务所在清单",
81 )
82 .await
83 }
84}
85
86impl ApiResponseTrait for GetTaskTasklistsResponse {
87 fn data_format() -> ResponseFormat {
88 ResponseFormat::Data
89 }
90}
91
92#[cfg(test)]
93#[allow(unused_imports)]
94mod tests {
95 use std::sync::Arc;
96
97 use super::*;
98
99 #[test]
100 fn test_get_task_tasklists_request() {
101 let config = openlark_core::config::Config::builder()
102 .app_id("test")
103 .app_secret("test")
104 .build();
105
106 let request = GetTaskTasklistsRequest::new(Arc::new(config), "task_123");
107
108 assert_eq!(request.task_guid, "task_123");
109 }
110
111 #[test]
112 fn test_task_get_tasklists_api_v2_url() {
113 let endpoint = TaskApiV2::TaskGetTasklists("task_123".to_string());
114 assert_eq!(
115 endpoint.to_url(),
116 "/open-apis/task/v2/tasks/task_123/tasklists"
117 );
118 }
119}