Skip to main content

wekan_cli/command_result/
rules.rs

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