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}