Skip to main content

openlark_workflow/v2/custom_field/
mod.rs

1/// add 模块。
2pub mod add;
3/// 创建接口。
4pub mod create;
5/// 删除接口。
6pub mod delete;
7/// 获取接口。
8pub mod get;
9/// 列表接口。
10pub mod list;
11/// 数据模型。
12pub mod models;
13/// 自定义字段选项模块。
14pub mod option;
15/// remove 模块。
16pub mod remove;
17/// 更新接口。
18pub mod update;
19
20use openlark_core::config::Config;
21use std::sync::Arc;
22
23/// CustomField:自定义字段资源
24#[derive(Clone)]
25pub struct CustomField {
26    config: Arc<Config>,
27    tasklist_guid: String,
28}
29
30impl CustomField {
31    /// 创建新的实例。
32    pub fn new(config: Arc<Config>) -> Self {
33        Self {
34            config,
35            tasklist_guid: String::new(),
36        }
37    }
38
39    /// 绑定任务清单上下文。
40    pub fn with_tasklist(mut self, tasklist_guid: impl Into<String>) -> Self {
41        self.tasklist_guid = tasklist_guid.into();
42        self
43    }
44
45    /// 创建新建请求。
46    pub fn create(&self) -> create::CreateCustomFieldRequest {
47        create::CreateCustomFieldRequest::new(self.config.clone(), self.tasklist_guid.clone())
48    }
49
50    /// 创建获取详情请求。
51    pub fn get(&self, field_guid: impl Into<String>) -> get::GetCustomFieldRequest {
52        get::GetCustomFieldRequest::new(
53            self.config.clone(),
54            self.tasklist_guid.clone(),
55            field_guid.into(),
56        )
57    }
58
59    /// 创建更新请求。
60    pub fn update(&self, field_guid: impl Into<String>) -> update::UpdateCustomFieldRequest {
61        update::UpdateCustomFieldRequest::new(
62            self.config.clone(),
63            self.tasklist_guid.clone(),
64            field_guid.into(),
65        )
66    }
67
68    /// 创建删除请求。
69    pub fn delete(&self, field_guid: impl Into<String>) -> delete::DeleteCustomFieldRequest {
70        delete::DeleteCustomFieldRequest::new(
71            self.config.clone(),
72            self.tasklist_guid.clone(),
73            field_guid.into(),
74        )
75    }
76
77    /// 创建列表请求。
78    pub fn list(&self) -> list::ListCustomFieldsRequest {
79        list::ListCustomFieldsRequest::new(self.config.clone(), self.tasklist_guid.clone())
80    }
81
82    /// 获取自定义字段选项资源(不需要 tasklist_guid)
83    pub fn option(
84        &self,
85        custom_field_guid: impl Into<String>,
86    ) -> option::CustomFieldOptionResource {
87        option::CustomFieldOptionResource::new(self.config.clone(), custom_field_guid.into())
88    }
89}
90
91// 重新导出请求类型
92pub use add::AddCustomFieldRequest;
93pub use create::CreateCustomFieldRequest;
94pub use delete::DeleteCustomFieldRequest;
95pub use get::GetCustomFieldRequest;
96pub use list::ListCustomFieldsRequest;
97pub use remove::RemoveCustomFieldRequest;
98pub use update::UpdateCustomFieldRequest;
99
100// 重新导出响应类型
101pub use models::{
102    CreateCustomFieldBody, CreateCustomFieldResponse, CustomFieldConfig, CustomFieldItem,
103    CustomFieldType, DeleteCustomFieldResponse, GetCustomFieldResponse, ListCustomFieldsResponse,
104    UpdateCustomFieldBody, UpdateCustomFieldResponse,
105};
106
107#[cfg(test)]
108#[allow(unused_imports)]
109mod tests {
110    use super::*;
111    use std::sync::Arc;
112
113    fn create_test_config() -> Arc<Config> {
114        Arc::new(
115            Config::builder()
116                .app_id("test_app")
117                .app_secret("test_secret")
118                .build(),
119        )
120    }
121
122    #[test]
123    fn test_custom_field_new() {
124        let config = create_test_config();
125        let field = CustomField::new(config);
126        assert!(field.tasklist_guid.is_empty());
127    }
128
129    #[test]
130    fn test_custom_field_with_tasklist() {
131        let config = create_test_config();
132        let field = CustomField::new(config).with_tasklist("tasklist_123");
133        assert_eq!(field.tasklist_guid, "tasklist_123");
134    }
135
136    #[test]
137    fn test_custom_field_create() {
138        let config = create_test_config();
139        let field = CustomField::new(config).with_tasklist("tasklist_123");
140        let _request = field.create();
141    }
142
143    #[test]
144    fn test_custom_field_get() {
145        let config = create_test_config();
146        let field = CustomField::new(config).with_tasklist("tasklist_123");
147        let _request = field.get("field_456");
148    }
149
150    #[test]
151    fn test_custom_field_update() {
152        let config = create_test_config();
153        let field = CustomField::new(config).with_tasklist("tasklist_123");
154        let _request = field.update("field_456");
155    }
156
157    #[test]
158    fn test_custom_field_delete() {
159        let config = create_test_config();
160        let field = CustomField::new(config).with_tasklist("tasklist_123");
161        let _request = field.delete("field_456");
162    }
163
164    #[test]
165    fn test_custom_field_list() {
166        let config = create_test_config();
167        let field = CustomField::new(config).with_tasklist("tasklist_123");
168        let _request = field.list();
169    }
170
171    #[test]
172    fn test_custom_field_option() {
173        let config = create_test_config();
174        let field = CustomField::new(config);
175        let _resource = field.option("field_456");
176    }
177}