openlark_workflow/v2/tasklist/
models.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Default)]
7pub struct CreateTasklistBody {
8 pub summary: String,
10
11 #[serde(skip_serializing_if = "Option::is_none")]
13 pub description: Option<String>,
14
15 #[serde(skip_serializing_if = "Option::is_none")]
17 pub icon: Option<TasklistIcon>,
18}
19
20#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
22#[serde(tag = "type")]
23pub enum TasklistIcon {
24 #[serde(rename = "default")]
25 Default { index: i32 },
26 #[serde(rename = "emoji")]
27 Emoji { emoji: String },
28 #[serde(rename = "image")]
29 Image { image_key: String },
30}
31
32#[derive(Debug, Clone, Serialize, Default)]
34pub struct UpdateTasklistBody {
35 #[serde(skip_serializing_if = "Option::is_none")]
37 pub summary: Option<String>,
38
39 #[serde(skip_serializing_if = "Option::is_none")]
41 pub description: Option<String>,
42
43 #[serde(skip_serializing_if = "Option::is_none")]
45 pub icon: Option<TasklistIcon>,
46}
47
48#[derive(Debug, Clone, Deserialize)]
50pub struct CreateTasklistResponse {
51 pub tasklist_guid: String,
53
54 pub summary: String,
56
57 #[serde(default)]
59 pub description: Option<String>,
60
61 #[serde(default)]
63 pub icon: Option<TasklistIcon>,
64
65 pub created_at: String,
67
68 pub updated_at: String,
70}
71
72#[derive(Debug, Clone, Deserialize)]
74pub struct GetTasklistResponse {
75 pub tasklist_guid: String,
77
78 pub summary: String,
80
81 #[serde(default)]
83 pub description: Option<String>,
84
85 #[serde(default)]
87 pub icon: Option<TasklistIcon>,
88
89 pub created_at: String,
91
92 pub updated_at: String,
94}
95
96#[derive(Debug, Clone, Deserialize)]
98pub struct UpdateTasklistResponse {
99 pub tasklist_guid: String,
101
102 pub summary: String,
104
105 #[serde(default)]
107 pub description: Option<String>,
108
109 #[serde(default)]
111 pub icon: Option<TasklistIcon>,
112
113 pub updated_at: String,
115}
116
117#[derive(Debug, Clone, Deserialize)]
119pub struct DeleteTasklistResponse {
120 pub success: bool,
122
123 pub tasklist_guid: String,
125}
126
127#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
129pub struct TasklistItem {
130 pub tasklist_guid: String,
132
133 pub summary: String,
135
136 #[serde(default)]
138 pub description: Option<String>,
139
140 #[serde(default)]
142 pub icon: Option<TasklistIcon>,
143
144 pub created_at: String,
146
147 pub updated_at: String,
149}
150
151#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
153pub struct ListTasklistsResponse {
154 #[serde(default)]
156 pub has_more: bool,
157
158 #[serde(skip_serializing_if = "Option::is_none")]
160 pub page_token: Option<String>,
161
162 #[serde(skip_serializing_if = "Option::is_none")]
164 pub total: Option<i32>,
165
166 #[serde(default)]
168 pub items: Vec<TasklistItem>,
169}
170
171#[cfg(test)]
172#[allow(unused_imports)]
173mod tests {
174
175 #[test]
176 fn test_serialization_roundtrip() {
177 let json = r#"{"test": "value"}"#;
179 assert!(serde_json::from_str::<serde_json::Value>(json).is_ok());
180 }
181
182 #[test]
183 fn test_deserialization_from_json() {
184 let json = r#"{"field": "data"}"#;
186 let value: serde_json::Value = serde_json::from_str(json).unwrap();
187 assert_eq!(value["field"], "data");
188 }
189}