openlark_workflow/v2/task/
remove_dependencies.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 RemoveDependenciesBody {
18 pub dependency_guids: Vec<String>,
20}
21
22#[derive(Debug, Clone, Deserialize)]
24pub struct RemoveDependenciesResponse {
25 pub task_guid: String,
27 #[serde(default)]
29 pub removed_dependencies: Vec<String>,
30}
31
32#[derive(Debug, Clone)]
34pub struct RemoveDependenciesRequest {
35 config: Arc<Config>,
37 task_guid: String,
39 body: RemoveDependenciesBody,
41}
42
43impl RemoveDependenciesRequest {
44 pub fn new(config: Arc<Config>, task_guid: impl Into<String>) -> Self {
46 Self {
47 config,
48 task_guid: task_guid.into(),
49 body: RemoveDependenciesBody::default(),
50 }
51 }
52
53 pub fn dependency_guids(mut self, dependency_guids: Vec<String>) -> Self {
55 self.body.dependency_guids = dependency_guids;
56 self
57 }
58
59 pub fn remove_dependency(mut self, dependency_guid: impl Into<String>) -> Self {
61 self.body.dependency_guids.push(dependency_guid.into());
62 self
63 }
64
65 pub async fn execute(self) -> SDKResult<RemoveDependenciesResponse> {
67 self.execute_with_options(openlark_core::req_option::RequestOption::default())
68 .await
69 }
70
71 pub async fn execute_with_options(
73 self,
74 option: openlark_core::req_option::RequestOption,
75 ) -> SDKResult<RemoveDependenciesResponse> {
76 validate_required!(self.task_guid.trim(), "任务GUID不能为空");
78 validate_required!(self.body.dependency_guids, "依赖GUID列表不能为空");
79
80 let api_endpoint = TaskApiV2::TaskRemoveDependencies(self.task_guid.clone());
81 let mut request = ApiRequest::<RemoveDependenciesResponse>::post(api_endpoint.to_url());
82
83 let request_body = &self.body;
84 request = request.body(serialize_params(request_body, "移除任务依赖")?);
85
86 let response =
87 openlark_core::http::Transport::request(request, &self.config, Some(option)).await?;
88 extract_response_data(response, "移除任务依赖")
89 }
90}
91
92impl ApiResponseTrait for RemoveDependenciesResponse {
93 fn data_format() -> ResponseFormat {
94 ResponseFormat::Data
95 }
96}
97
98#[cfg(test)]
99#[allow(unused_imports)]
100mod tests {
101 use std::sync::Arc;
102
103 use super::*;
104
105 #[test]
106 fn test_remove_dependencies_builder() {
107 let config = Arc::new(
108 openlark_core::config::Config::builder()
109 .app_id("test")
110 .app_secret("test")
111 .build(),
112 );
113
114 let request = RemoveDependenciesRequest::new(config, "task_123")
115 .dependency_guids(vec!["dep_1".to_string(), "dep_2".to_string()]);
116
117 assert_eq!(request.task_guid, "task_123");
118 assert_eq!(request.body.dependency_guids, vec!["dep_1", "dep_2"]);
119 }
120
121 #[test]
122 fn test_remove_dependency_single() {
123 let config = Arc::new(
124 openlark_core::config::Config::builder()
125 .app_id("test")
126 .app_secret("test")
127 .build(),
128 );
129
130 let request = RemoveDependenciesRequest::new(config, "task_123")
131 .remove_dependency("dep_1")
132 .remove_dependency("dep_2");
133
134 assert_eq!(request.body.dependency_guids, vec!["dep_1", "dep_2"]);
135 }
136
137 #[test]
138 fn test_task_remove_dependencies_api_v2_url() {
139 let endpoint = TaskApiV2::TaskRemoveDependencies("task_123".to_string());
140 assert_eq!(
141 endpoint.to_url(),
142 "/open-apis/task/v2/tasks/task_123/remove_dependencies"
143 );
144 }
145}