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