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