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 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}