1use crate::client::metadata::*;
2use serde::Serialize;
3use serde_json::Number;
4
5#[derive(Debug, Eq, PartialEq, Serialize)]
6pub struct BotRunReport {
7 pub run_id: String,
8 pub status: BotRunStatus,
9}
10
11impl From<crate::client::cards::bot_runs::BotRunReport> for BotRunReport {
12 fn from(report: crate::client::cards::bot_runs::BotRunReport) -> Self {
13 Self {
14 run_id: report.run_id,
15 status: report.status.into(),
16 }
17 }
18}
19
20#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize)]
21#[serde(rename_all = "snake_case")]
22pub enum BotRunStatus {
23 Queued,
24 Running,
25 AwaitingInput,
26 Review,
27 Done,
28 Failed,
29 Stopped,
30}
31
32impl From<crate::client::cards::bot_runs::BotRunStatus> for BotRunStatus {
33 fn from(status: crate::client::cards::bot_runs::BotRunStatus) -> Self {
34 use crate::client::cards::bot_runs::BotRunStatus as WireStatus;
35 match status {
36 WireStatus::Queued => Self::Queued,
37 WireStatus::Running => Self::Running,
38 WireStatus::AwaitingInput => Self::AwaitingInput,
39 WireStatus::Review => Self::Review,
40 WireStatus::Done => Self::Done,
41 WireStatus::Failed => Self::Failed,
42 WireStatus::Stopped => Self::Stopped,
43 }
44 }
45}
46
47#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize)]
48#[serde(rename_all = "snake_case")]
49pub enum CardMembershipKind {
50 Member,
51 Assignee,
52}
53
54#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
55pub struct CardMemberCollectionSuccess {
56 pub board_id: String,
57 pub list_id: String,
58 pub card_id: String,
59 pub members: Vec<String>,
60}
61
62#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
63pub struct CardAssigneeCollectionSuccess {
64 pub board_id: String,
65 pub list_id: String,
66 pub card_id: String,
67 pub assignees: Vec<String>,
68}
69
70#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
71pub struct CardMembershipMutationSuccess {
72 pub board_id: String,
73 pub list_id: String,
74 pub card_id: String,
75 pub user_id: String,
76 pub kind: CardMembershipKind,
77 pub action: super::MembershipAction,
78 pub members: Vec<String>,
79 pub assignees: Vec<String>,
80}
81
82#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
83pub struct CardSummary {
84 pub card_id: String,
85 pub title: Option<String>,
86 pub description: Option<String>,
87 pub swimlane_id: Option<String>,
88 pub received_at: Option<String>,
89 pub start_at: Option<String>,
90 pub due_at: Option<String>,
91 pub end_at: Option<String>,
92 pub assignees: Vec<String>,
93 pub sort: Option<Number>,
94}
95
96#[derive(Debug, Eq, PartialEq, Serialize)]
97pub struct CardCollectionSuccess {
98 pub board_id: String,
99 pub list_id: String,
100 pub cards: Vec<CardSummary>,
101}
102
103#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
104#[serde(untagged)]
105pub enum CardDetailCustomFieldValue {
106 String(String),
107 Number(Number),
108 Boolean(bool),
109 Strings(Vec<Option<String>>),
110}
111
112#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
113pub struct CardDetailCustomField {
114 pub custom_field_id: Option<String>,
115 pub value: Option<CardDetailCustomFieldValue>,
116}
117
118#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize)]
119#[serde(rename_all = "lowercase")]
120pub enum CardDetailStickerHighlight {
121 Underline,
122 Round,
123}
124
125#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
126pub struct CardDetailSticker {
127 pub icon: Option<String>,
128 pub name: Option<String>,
129 pub highlight: Option<CardDetailStickerHighlight>,
130 pub position: Option<Number>,
131}
132
133#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
134pub struct CardDetailLocation {
135 pub location_id: String,
136 pub name: Option<String>,
137 pub address: Option<String>,
138 pub latitude: Option<Number>,
139 pub longitude: Option<Number>,
140}
141
142#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
143pub struct CardDetailDependency {
144 pub card_id: String,
145 pub dependency_type: Option<String>,
146 pub color: Option<String>,
147 pub icon: Option<String>,
148}
149
150#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
151pub struct CardDetailVote {
152 pub question: String,
153 pub positive: Vec<String>,
154 pub negative: Vec<String>,
155 pub end: Option<String>,
156 pub public: bool,
157 pub allow_non_board_members: bool,
158}
159
160#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
161pub struct CardDetailPoker {
162 pub question: Option<bool>,
163 pub one: Vec<String>,
164 pub two: Vec<String>,
165 pub three: Vec<String>,
166 pub five: Vec<String>,
167 pub eight: Vec<String>,
168 pub thirteen: Vec<String>,
169 pub twenty: Vec<String>,
170 pub forty: Vec<String>,
171 pub one_hundred: Vec<String>,
172 pub unsure: Vec<String>,
173 pub end: Option<String>,
174 pub allow_non_board_members: Option<bool>,
175 pub estimation: Option<Number>,
176}
177
178#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
179pub struct CardDetail {
180 pub scrum: Option<Box<ScrumCard>>,
181 pub drawings: Option<Vec<CardDrawing>>,
182 pub custom_field_links: Option<Vec<CardCustomFieldLink>>,
183 pub sync_last_source: Option<Box<CardSyncLastSource>>,
184 pub email: Option<Box<CardEmail>>,
185
186 pub scrum_revision: Option<serde_json::Number>,
187 pub parent_ids: Option<Vec<String>>,
188 pub map_x: Option<serde_json::Number>,
189 pub map_y: Option<serde_json::Number>,
190 pub column_set_values: Option<std::collections::BTreeMap<String, String>>,
191 pub card_kind: Option<String>,
192 pub last_recurrence_at: Option<String>,
193 pub sync_source_key: Option<String>,
194 pub sync_label_ids: Option<Vec<String>>,
195 pub sync_issue_state: Option<String>,
196 pub sync_closed_by_we_kan: Option<bool>,
197 pub sync_external_id: Option<String>,
198 pub sync_source_type: Option<String>,
199 pub attached_card_ids: Option<Vec<String>>,
200 pub flow_start_at: Option<String>,
201 pub flow_user_id: Option<String>,
202 pub pomodoro_start_at: Option<String>,
203 pub pomodoro_phase: Option<String>,
204 pub pomodoro_user_id: Option<String>,
205 pub show_list_on_card: Option<bool>,
206 pub checklists: Option<Vec<crate::client::checklists::ChecklistDocument>>,
207 pub list_entered_at: Option<String>,
208 pub recurrence_interval: Option<String>,
209 pub last_move_reason: Option<String>,
210 pub flow_interruptions: Option<Number>,
211 pub pomodoro_count: Option<Number>,
212 pub pomodoro_work_minutes: Option<Number>,
213 pub card_id: String,
214 pub title: Option<String>,
215 pub watchers: Option<Vec<String>>,
216 pub archived: bool,
217 pub archived_at: Option<String>,
218 pub deleted_at: Option<String>,
219 pub deleted_by: Option<String>,
220 pub delete_batch_id: Option<String>,
221 pub parent_id: Option<String>,
222 pub list_id: Option<String>,
223 pub swimlane_id: String,
224 pub board_id: Option<String>,
225 pub cover_id: Option<String>,
226 pub color: Option<String>,
227 pub created_at: String,
228 pub modified_at: String,
229 pub custom_fields: Vec<CardDetailCustomField>,
230 pub date_last_activity: String,
231 pub description: Option<String>,
232 pub requested_by: Option<String>,
233 pub assigned_by: Option<String>,
234 pub label_ids: Vec<Option<String>>,
235 pub members: Vec<String>,
236 pub assignees: Vec<String>,
237 pub requesters: Vec<String>,
238 pub assigners: Vec<String>,
239 pub received_at: Option<String>,
240 pub start_at: Option<String>,
241 pub due_at: Option<String>,
242 pub end_at: Option<String>,
243 pub due_complete: Option<bool>,
244 pub stickers: Vec<CardDetailSticker>,
245 pub location_name: Option<String>,
246 pub location_address: Option<String>,
247 pub location_latitude: Option<Number>,
248 pub location_longitude: Option<Number>,
249 pub locations: Vec<CardDetailLocation>,
250 pub spent_time: Option<Number>,
251 pub is_overtime: Option<bool>,
252 pub user_id: String,
253 pub sort: Option<Number>,
254 pub subtask_sort: Option<Number>,
255 pub card_type: String,
256 pub linked_id: Option<String>,
257 pub card_dependencies: Vec<CardDetailDependency>,
258 pub vote: Option<CardDetailVote>,
259 pub poker: Option<CardDetailPoker>,
260 pub target_id_gantt: Vec<String>,
261 pub link_type_gantt: Vec<Number>,
262 pub link_id_gantt: Vec<String>,
263 pub card_number: Option<Number>,
264 pub show_activities: bool,
265 pub show_list_on_minicard: Option<bool>,
266 pub show_checklist_at_minicard: Option<bool>,
267 pub hide_finished_checklist_if_items_are_hidden: Option<bool>,
268}
269
270#[derive(Debug, Eq, PartialEq, Serialize)]
271pub struct CardCreateSuccess {
272 pub board_id: String,
273 pub list_id: String,
274 pub card_id: String,
275}
276
277#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize)]
278#[serde(rename_all = "snake_case")]
279pub enum CardSubmittedField {
280 Title,
281 Sort,
282 ParentId,
283 Description,
284 Color,
285 LabelIds,
286 RequestedBy,
287 AssignedBy,
288 ReceivedAt,
289 StartAt,
290 DueAt,
291 EndAt,
292 SpentTime,
293 IsOverTime,
294 Members,
295 Assignees,
296 DueComplete,
297 SwimlaneId,
298 ListId,
299 NewBoardId,
300 NewSwimlaneId,
301 NewListId,
302 MoveReason,
303 Archive,
304 Vote,
305 Poker,
306 CustomFields,
307 Stickers,
308 Locations,
309}
310
311#[derive(Debug, Eq, PartialEq, Serialize)]
312pub struct CardUpdateSuccess {
313 pub board_id: String,
314 pub list_id: String,
315 pub card_id: String,
316 pub submitted_fields: Vec<CardSubmittedField>,
317}
318
319#[derive(Debug, Eq, PartialEq, Serialize)]
320pub struct CardArchiveSuccess {
321 pub board_id: String,
322 pub list_id: String,
323 pub card_id: String,
324 pub archived: bool,
325 pub archived_at: String,
326}
327
328#[derive(Debug, Eq, PartialEq, Serialize)]
329pub struct CardRestoreSuccess {
330 pub board_id: String,
331 pub list_id: String,
332 pub card_id: String,
333 pub archived: bool,
334}
335
336#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize)]
337#[serde(rename_all = "snake_case")]
338pub enum CardDeleteMode {
339 Hard,
340}
341
342#[derive(Debug, Eq, PartialEq, Serialize)]
343pub struct CardDeleteSuccess {
344 pub board_id: String,
345 pub list_id: String,
346 pub card_id: String,
347 pub deletion_requested: bool,
348 pub delete_mode: CardDeleteMode,
349}
350
351#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
352pub struct CardCustomFieldSetSuccess {
353 pub board_id: String,
354 pub list_id: String,
355 pub card_id: String,
356 pub custom_field_id: String,
357 pub custom_fields: Vec<CardDetailCustomField>,
358}
359#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
360pub struct CardCustomFieldQuerySuccess {
361 pub board_id: String,
362 pub custom_field_id: String,
363 pub value: String,
364 pub cards: Vec<CardDetail>,
365}
366
367#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
368pub struct CardLabelCollection {
369 pub board_id: String,
370 pub list_id: String,
371 pub card_id: String,
372 pub label_ids: Vec<Option<String>>,
373}
374
375#[derive(Debug, Eq, PartialEq, Serialize)]
376pub struct CardCopySuccess {
377 pub source_board_id: String,
378 pub source_list_id: String,
379 pub source_card_id: String,
380 pub target_board_id: String,
381 pub target_list_id: String,
382 pub target_swimlane_id: String,
383 pub card_id: String,
384}
385#[derive(Debug, Eq, PartialEq, Serialize)]
386pub struct CardCountSuccess {
387 pub board_id: String,
388 pub list_id: Option<String>,
389 pub count: u64,
390}
391#[derive(Debug, Eq, PartialEq, Serialize)]
392pub struct SwimlaneCardCollectionSuccess {
393 pub board_id: String,
394 pub swimlane_id: String,
395 pub cards: Vec<SwimlaneCardSummary>,
396}
397
398#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
399pub struct SwimlaneCardSummary {
400 pub card_id: String,
401 pub title: Option<String>,
402 pub description: Option<String>,
403 pub list_id: Option<String>,
404 pub received_at: Option<String>,
405 pub start_at: Option<String>,
406 pub due_at: Option<String>,
407 pub end_at: Option<String>,
408 pub assignees: Option<Vec<Option<String>>>,
409 pub sort: Option<Number>,
410}