wekan_cli/command_result/
rules.rs1use crate::client::rules::{RuleDocument, RuleNumber};
2use serde::Serialize;
3
4#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
5pub struct RuleTriggerDetail {
6 #[serde(skip_serializing_if = "Option::is_none")]
7 pub activity_type: Option<Option<String>>,
8 #[serde(skip_serializing_if = "Option::is_none")]
9 pub description: Option<Option<String>>,
10 #[serde(skip_serializing_if = "Option::is_none")]
11 pub user_id: Option<Option<String>>,
12 #[serde(skip_serializing_if = "Option::is_none")]
13 pub username: Option<Option<String>>,
14 #[serde(skip_serializing_if = "Option::is_none")]
15 pub list_name: Option<Option<String>>,
16 #[serde(skip_serializing_if = "Option::is_none")]
17 pub old_list_name: Option<Option<String>>,
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub swimlane_name: Option<Option<String>>,
20 #[serde(skip_serializing_if = "Option::is_none")]
21 pub card_title: Option<Option<String>>,
22 #[serde(skip_serializing_if = "Option::is_none")]
23 pub checklist_name: Option<Option<String>>,
24 #[serde(skip_serializing_if = "Option::is_none")]
25 pub checklist_item_name: Option<Option<String>>,
26 #[serde(skip_serializing_if = "Option::is_none")]
27 pub label_id: Option<Option<String>>,
28 #[serde(skip_serializing_if = "Option::is_none")]
29 pub attachment_name: Option<Option<String>>,
30 #[serde(skip_serializing_if = "Option::is_none")]
31 pub desc: Option<Option<String>>,
32 #[serde(skip_serializing_if = "Option::is_none")]
33 pub schedule_kind: Option<Option<String>>,
34 #[serde(skip_serializing_if = "Option::is_none")]
35 pub schedule_type: Option<Option<String>>,
36 #[serde(skip_serializing_if = "Option::is_none")]
37 pub at_time: Option<Option<String>>,
38 #[serde(skip_serializing_if = "Option::is_none")]
39 pub weekday: Option<Option<RuleNumber>>,
40 #[serde(skip_serializing_if = "Option::is_none")]
41 pub day_of_month: Option<Option<RuleNumber>>,
42 #[serde(skip_serializing_if = "Option::is_none")]
43 pub on_date: Option<Option<String>>,
44 #[serde(skip_serializing_if = "Option::is_none")]
45 pub due_condition: Option<Option<String>>,
46 #[serde(skip_serializing_if = "Option::is_none")]
47 pub days: Option<Option<RuleNumber>>,
48 #[serde(skip_serializing_if = "Option::is_none")]
49 pub last_run_key: Option<Option<String>>,
50 #[serde(skip_serializing_if = "Option::is_none")]
51 pub last_run_at: Option<Option<String>>,
52 #[serde(skip_serializing_if = "Option::is_none")]
53 pub button_type: Option<Option<String>>,
54 #[serde(skip_serializing_if = "Option::is_none")]
55 pub button_label: Option<Option<String>>,
56}
57impl From<crate::client::rules::RuleTrigger> for RuleTriggerDetail {
58 fn from(d: crate::client::rules::RuleTrigger) -> Self {
59 Self {
60 activity_type: d.activity_type,
61 description: d.description,
62 user_id: d.user_id,
63 username: d.username,
64 list_name: d.list_name,
65 old_list_name: d.old_list_name,
66 swimlane_name: d.swimlane_name,
67 card_title: d.card_title,
68 checklist_name: d.checklist_name,
69 checklist_item_name: d.checklist_item_name,
70 label_id: d.label_id,
71 attachment_name: d.attachment_name,
72 desc: d.desc,
73 schedule_kind: d.schedule_kind,
74 schedule_type: d.schedule_type,
75 at_time: d.at_time,
76 weekday: d.weekday,
77 day_of_month: d.day_of_month,
78 on_date: d.on_date,
79 due_condition: d.due_condition,
80 days: d.days,
81 last_run_key: d.last_run_key,
82 last_run_at: d.last_run_at,
83 button_type: d.button_type,
84 button_label: d.button_label,
85 }
86 }
87}
88
89#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
90pub struct RuleActionDetail {
91 #[serde(skip_serializing_if = "Option::is_none")]
92 pub action_type: Option<Option<String>>,
93 #[serde(skip_serializing_if = "Option::is_none")]
94 pub list_name: Option<Option<String>>,
95 #[serde(skip_serializing_if = "Option::is_none")]
96 pub swimlane_name: Option<Option<String>>,
97 #[serde(skip_serializing_if = "Option::is_none")]
98 pub card_name: Option<Option<String>>,
99 #[serde(skip_serializing_if = "Option::is_none")]
100 pub from_list_name: Option<Option<String>>,
101 #[serde(skip_serializing_if = "Option::is_none")]
102 pub checklist_name: Option<Option<String>>,
103 #[serde(skip_serializing_if = "Option::is_none")]
104 pub check_item_name: Option<Option<String>>,
105 #[serde(skip_serializing_if = "Option::is_none")]
106 pub checklist_items: Option<Option<String>>,
107 #[serde(skip_serializing_if = "Option::is_none")]
108 pub date_field: Option<Option<String>>,
109 #[serde(skip_serializing_if = "Option::is_none")]
110 pub unit: Option<Option<String>>,
111 #[serde(skip_serializing_if = "Option::is_none")]
112 pub email_to: Option<Option<String>>,
113 #[serde(skip_serializing_if = "Option::is_none")]
114 pub email_subject: Option<Option<String>>,
115 #[serde(skip_serializing_if = "Option::is_none")]
116 pub email_msg: Option<Option<String>>,
117 #[serde(skip_serializing_if = "Option::is_none")]
118 pub selected_color: Option<Option<String>>,
119 #[serde(skip_serializing_if = "Option::is_none")]
120 pub label_id: Option<Option<String>>,
121 #[serde(skip_serializing_if = "Option::is_none")]
122 pub username: Option<Option<String>>,
123 #[serde(skip_serializing_if = "Option::is_none")]
124 pub sort_field: Option<Option<String>>,
125 #[serde(skip_serializing_if = "Option::is_none")]
126 pub desc: Option<Option<String>>,
127 #[serde(skip_serializing_if = "Option::is_none")]
128 pub days: Option<Option<RuleNumber>>,
129}
130impl From<crate::client::rules::RuleAction> for RuleActionDetail {
131 fn from(d: crate::client::rules::RuleAction) -> Self {
132 Self {
133 action_type: d.action_type,
134 list_name: d.list_name,
135 swimlane_name: d.swimlane_name,
136 card_name: d.card_name,
137 from_list_name: d.from_list_name,
138 checklist_name: d.checklist_name,
139 check_item_name: d.check_item_name,
140 checklist_items: d.checklist_items,
141 date_field: d.date_field,
142 unit: d.unit,
143 email_to: d.email_to,
144 email_subject: d.email_subject,
145 email_msg: d.email_msg,
146 selected_color: d.selected_color,
147 label_id: d.label_id,
148 username: d.username,
149 sort_field: d.sort_field,
150 desc: d.desc,
151 days: d.days,
152 }
153 }
154}
155
156#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
157pub struct RuleDetail {
158 pub board_id: String,
159 pub rule_id: String,
160 pub title: String,
161 pub trigger: Option<RuleTriggerDetail>,
162 pub action: Option<RuleActionDetail>,
163}
164impl RuleDetail {
165 pub(crate) fn from_document(board_id: String, d: RuleDocument) -> Self {
166 Self {
167 board_id,
168 rule_id: d.rule_id,
169 title: d.title,
170 trigger: d.trigger.map(Into::into),
171 action: d.action.map(Into::into),
172 }
173 }
174}
175#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
176pub struct RuleCollectionSuccess {
177 pub board_id: String,
178 pub rules: Vec<RuleDetail>,
179}
180#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
181pub struct RuleCreateSuccess {
182 pub board_id: String,
183 pub rule_id: String,
184 pub trigger_id: String,
185 pub action_id: String,
186}
187#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize)]
188#[serde(rename_all = "snake_case")]
189pub enum RuleSubmittedField {
190 Title,
191 Trigger,
192 Action,
193}
194#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
195pub struct RuleUpdateSuccess {
196 pub board_id: String,
197 pub rule_id: String,
198 pub submitted_fields: Vec<RuleSubmittedField>,
199}
200#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
201pub struct RuleDeleteSuccess {
202 pub board_id: String,
203 pub rule_id: String,
204 pub deleted: bool,
205}