Skip to main content

wekan_cli/client/cards/
inputs.rs

1use serde::{Deserialize, Serialize};
2use serde_json::Number;
3
4use super::CardStickerHighlight;
5
6#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
7#[serde(deny_unknown_fields, rename_all = "camelCase")]
8pub struct CardVoteInput {
9    #[serde(
10        default,
11        skip_serializing_if = "Option::is_none",
12        deserialize_with = "present_value"
13    )]
14    pub question: Option<String>,
15    #[serde(
16        default,
17        skip_serializing_if = "Option::is_none",
18        deserialize_with = "present_value"
19    )]
20    pub positive: Option<Vec<String>>,
21    #[serde(
22        default,
23        skip_serializing_if = "Option::is_none",
24        deserialize_with = "present_value"
25    )]
26    pub negative: Option<Vec<String>>,
27    #[serde(
28        default,
29        skip_serializing_if = "Option::is_none",
30        deserialize_with = "nullable_value"
31    )]
32    pub end: Option<Option<String>>,
33    #[serde(
34        default,
35        skip_serializing_if = "Option::is_none",
36        deserialize_with = "present_value"
37    )]
38    pub public: Option<bool>,
39    #[serde(
40        default,
41        skip_serializing_if = "Option::is_none",
42        deserialize_with = "present_value"
43    )]
44    pub allow_non_board_members: Option<bool>,
45}
46
47#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
48#[serde(deny_unknown_fields, rename_all = "camelCase")]
49pub struct CardPokerInput {
50    #[serde(
51        default,
52        skip_serializing_if = "Option::is_none",
53        deserialize_with = "nullable_value"
54    )]
55    pub question: Option<Option<bool>>,
56    #[serde(
57        default,
58        skip_serializing_if = "Option::is_none",
59        deserialize_with = "nullable_value"
60    )]
61    pub one: Option<Option<Vec<String>>>,
62    #[serde(
63        default,
64        skip_serializing_if = "Option::is_none",
65        deserialize_with = "nullable_value"
66    )]
67    pub two: Option<Option<Vec<String>>>,
68    #[serde(
69        default,
70        skip_serializing_if = "Option::is_none",
71        deserialize_with = "nullable_value"
72    )]
73    pub three: Option<Option<Vec<String>>>,
74    #[serde(
75        default,
76        skip_serializing_if = "Option::is_none",
77        deserialize_with = "nullable_value"
78    )]
79    pub five: Option<Option<Vec<String>>>,
80    #[serde(
81        default,
82        skip_serializing_if = "Option::is_none",
83        deserialize_with = "nullable_value"
84    )]
85    pub eight: Option<Option<Vec<String>>>,
86    #[serde(
87        default,
88        skip_serializing_if = "Option::is_none",
89        deserialize_with = "nullable_value"
90    )]
91    pub thirteen: Option<Option<Vec<String>>>,
92    #[serde(
93        default,
94        skip_serializing_if = "Option::is_none",
95        deserialize_with = "nullable_value"
96    )]
97    pub twenty: Option<Option<Vec<String>>>,
98    #[serde(
99        default,
100        skip_serializing_if = "Option::is_none",
101        deserialize_with = "nullable_value"
102    )]
103    pub forty: Option<Option<Vec<String>>>,
104    #[serde(
105        default,
106        skip_serializing_if = "Option::is_none",
107        deserialize_with = "nullable_value"
108    )]
109    pub one_hundred: Option<Option<Vec<String>>>,
110    #[serde(
111        default,
112        skip_serializing_if = "Option::is_none",
113        deserialize_with = "nullable_value"
114    )]
115    pub unsure: Option<Option<Vec<String>>>,
116    #[serde(
117        default,
118        skip_serializing_if = "Option::is_none",
119        deserialize_with = "nullable_value"
120    )]
121    pub end: Option<Option<String>>,
122    #[serde(
123        default,
124        skip_serializing_if = "Option::is_none",
125        deserialize_with = "nullable_value"
126    )]
127    pub allow_non_board_members: Option<Option<bool>>,
128    #[serde(
129        default,
130        skip_serializing_if = "Option::is_none",
131        deserialize_with = "nullable_value"
132    )]
133    pub estimation: Option<Option<Number>>,
134}
135
136#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
137#[serde(deny_unknown_fields)]
138pub struct CardCustomFieldInput {
139    #[serde(
140        rename = "_id",
141        default,
142        skip_serializing_if = "Option::is_none",
143        deserialize_with = "nullable_value"
144    )]
145    pub custom_field_id: Option<Option<String>>,
146    #[serde(
147        default,
148        skip_serializing_if = "Option::is_none",
149        deserialize_with = "nullable_value"
150    )]
151    pub value: Option<Option<serde_json::Value>>,
152}
153
154fn nullable_value<'de, D, T>(deserializer: D) -> Result<Option<Option<T>>, D::Error>
155where
156    D: serde::Deserializer<'de>,
157    T: Deserialize<'de>,
158{
159    Option::<T>::deserialize(deserializer).map(Some)
160}
161
162#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
163#[serde(deny_unknown_fields)]
164pub struct CardStickerInput {
165    #[serde(
166        default,
167        skip_serializing_if = "Option::is_none",
168        deserialize_with = "present_value"
169    )]
170    pub icon: Option<String>,
171    #[serde(
172        default,
173        skip_serializing_if = "Option::is_none",
174        deserialize_with = "present_value"
175    )]
176    pub name: Option<String>,
177    #[serde(
178        default,
179        skip_serializing_if = "Option::is_none",
180        deserialize_with = "present_value"
181    )]
182    pub highlight: Option<CardStickerHighlight>,
183    #[serde(
184        default,
185        skip_serializing_if = "Option::is_none",
186        deserialize_with = "present_value"
187    )]
188    pub position: Option<serde_json::Value>,
189}
190
191#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
192#[serde(deny_unknown_fields)]
193pub struct CardLocationInput {
194    #[serde(
195        rename = "_id",
196        default,
197        skip_serializing_if = "Option::is_none",
198        deserialize_with = "nullable_value"
199    )]
200    pub location_id: Option<Option<String>>,
201    #[serde(
202        default,
203        skip_serializing_if = "Option::is_none",
204        deserialize_with = "nullable_value"
205    )]
206    pub name: Option<Option<String>>,
207    #[serde(
208        default,
209        skip_serializing_if = "Option::is_none",
210        deserialize_with = "nullable_value"
211    )]
212    pub address: Option<Option<String>>,
213    #[serde(
214        default,
215        skip_serializing_if = "Option::is_none",
216        deserialize_with = "nullable_value"
217    )]
218    pub latitude: Option<Option<serde_json::Value>>,
219    #[serde(
220        default,
221        skip_serializing_if = "Option::is_none",
222        deserialize_with = "nullable_value"
223    )]
224    pub longitude: Option<Option<serde_json::Value>>,
225}
226
227fn present_value<'de, D, T>(deserializer: D) -> Result<Option<T>, D::Error>
228where
229    D: serde::Deserializer<'de>,
230    T: Deserialize<'de>,
231{
232    T::deserialize(deserializer).map(Some)
233}