wled_json_api_library/structures/
state.rs1use serde;
2use serde::{Serialize, Deserialize};
3use crate::errors::WledJsonApiError;
4use crate::structures::none_function;
5
6
7#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
8#[serde(rename_all = "camelCase")]
9pub struct State {
10 #[serde(skip_serializing_if = "Option::is_none")]
12 #[serde(default = "none_function")]
13 pub on: Option<bool>,
14
15 #[serde(skip_serializing_if = "Option::is_none")]
17 #[serde(default = "none_function")]
18 pub bri: Option<u8>,
19
20 #[serde(skip_serializing_if = "Option::is_none")]
22 #[serde(default = "none_function")]
23 pub transition: Option<u8>,
24
25 #[serde(skip_serializing_if = "Option::is_none")]
27 #[serde(default = "none_function")]
28 pub tt: Option<u8>,
29
30 #[serde(skip_serializing_if = "Option::is_none")]
32 #[serde(default = "none_function")]
33 pub ps: Option<i32>,
34
35 #[serde(skip_serializing_if = "Option::is_none")]
37 #[serde(default = "none_function")]
38 pub psave: Option<u8>,
39
40 #[serde(skip_serializing_if = "Option::is_none")]
42 #[serde(default = "none_function")]
43 pub pl: Option<i8>,
44
45 #[serde(skip_serializing_if = "Option::is_none")]
47 #[serde(default = "none_function")]
48 pub nl: Option<Nl>,
49
50 #[serde(skip_serializing_if = "Option::is_none")]
52 #[serde(default = "none_function")]
53 pub udpn: Option<Udpn>,
54
55 #[serde(skip_serializing_if = "Option::is_none")]
57 #[serde(default = "none_function")]
58 pub v: Option<bool>,
59
60 #[serde(skip_serializing_if = "Option::is_none")]
62 #[serde(default = "none_function")]
63 pub rb: Option<bool>,
64
65 #[serde(skip_serializing_if = "Option::is_none")]
67 #[serde(default = "none_function")]
68 pub live: Option<bool>,
69
70 #[serde(skip_serializing_if = "Option::is_none")]
72 #[serde(default = "none_function")]
73 pub lor: Option<u8>,
74
75 #[serde(skip_serializing_if = "Option::is_none")]
77 #[serde(default = "none_function")]
78 pub time: Option<u32>,
79
80 #[serde(skip_serializing_if = "Option::is_none")]
82 #[serde(default = "none_function")]
83 pub mainseg: Option<u8>,
84
85 #[serde(skip_serializing_if = "Option::is_none")]
87 #[serde(default = "none_function")]
88 pub playlist: Option<Playlist>,
89
90 #[serde(skip_serializing_if = "Option::is_none")]
92 #[serde(default = "none_function")]
93 pub seg: Option<Vec<Seg>>,
94}
95
96
97impl TryInto<String> for &State{
98 type Error = WledJsonApiError;
99 fn try_into(self) -> Result<String, WledJsonApiError> {
100 serde_json::to_string(self).map_err(|e| {WledJsonApiError::SerdeError(e)})
101 }
102}
103
104impl TryFrom<&str> for State{
105 type Error = WledJsonApiError;
106 fn try_from(str_in: &str) -> Result<State, WledJsonApiError> {
107 serde_json::from_str(str_in).map_err(|e| {WledJsonApiError::SerdeError(e)})
108 }
109}
110
111
112
113#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
114#[serde(rename_all = "camelCase")]
115pub struct Nl {
116 #[serde(skip_serializing_if = "Option::is_none")]
118 #[serde(default = "none_function")]
119 pub on: Option<bool>,
120
121 #[serde(skip_serializing_if = "Option::is_none")]
123 #[serde(default = "none_function")]
124 pub dur: Option<u8>,
125
126 #[serde(skip_serializing_if = "Option::is_none")]
128 #[serde(default = "none_function")]
129 pub fade: Option<bool>,
130
131 #[serde(skip_serializing_if = "Option::is_none")]
133 #[serde(default = "none_function")]
134 pub mode: Option<u8>,
135
136 #[serde(skip_serializing_if = "Option::is_none")]
138 #[serde(default = "none_function")]
139 pub tbri: Option<u8>,
140
141 #[serde(skip_serializing)]
143 #[serde(default = "none_function")]
144 pub rem: Option<i16>,
145}
146
147
148#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
149#[serde(rename_all = "camelCase")]
150pub struct Udpn {
151
152 #[serde(skip_serializing_if = "Option::is_none")]
154 #[serde(default = "none_function")]
155 pub send: Option<bool>,
156
157 #[serde(skip_serializing_if = "Option::is_none")]
159 #[serde(default = "none_function")]
160 pub recv: Option<bool>,
161
162 #[serde(skip_serializing_if = "Option::is_none")]
164 #[serde(default = "none_function")]
165 pub sgrp: Option<u8>,
166
167 #[serde(skip_serializing_if = "Option::is_none")]
169 #[serde(default = "none_function")]
170 pub rgrp: Option<u8>,
171
172 #[serde(skip_serializing_if = "Option::is_none")]
174 #[serde(default = "none_function")]
175 pub nn: Option<bool>,
176}
177
178#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
179#[serde(rename_all = "camelCase")]
180pub struct Seg {
181 #[serde(skip_serializing_if = "Option::is_none")]
183 #[serde(default = "none_function")]
184 pub id: Option<i16>,
185
186 #[serde(skip_serializing_if = "Option::is_none")]
188 #[serde(default = "none_function")]
189 pub start: Option<u16>,
190
191 #[serde(skip_serializing_if = "Option::is_none")]
193 #[serde(default = "none_function")]
194 pub stop: Option<u16>,
195
196 #[serde(skip_serializing)] #[serde(default = "none_function")]
199 pub len: Option<u16>,
200
201 #[serde(skip_serializing_if = "Option::is_none")]
203 #[serde(default = "none_function")]
204 pub grp: Option<u8>,
205
206 #[serde(skip_serializing_if = "Option::is_none")]
208 #[serde(default = "none_function")]
209 pub spc: Option<u8>,
210
211 #[serde(skip_serializing_if = "Option::is_none")]
213 #[serde(default = "none_function")]
214 pub of: Option<i16>,
215
216 #[serde(skip_serializing_if = "Option::is_none")]
218 #[serde(default = "none_function")]
219 pub on: Option<bool>,
220
221 #[serde(skip_serializing_if = "Option::is_none")]
223 #[serde(default = "none_function")]
224 pub frz: Option<bool>,
225
226 #[serde(skip_serializing_if = "Option::is_none")]
228 #[serde(default = "none_function")]
229 pub bri: Option<u8>,
230
231 #[serde(skip_serializing_if = "Option::is_none")]
233 #[serde(default = "none_function")]
234 pub cct: Option<u16>,
235
236 #[serde(skip_serializing_if = "Option::is_none")]
241 #[serde(default = "none_function")]
242 pub set: Option<u8>,
243
244 #[serde(skip_serializing_if = "Option::is_none")]
247 #[serde(default = "none_function")]
248 #[serde(rename = "n")]
249 pub name: Option<String>,
250
251 #[serde(skip_serializing_if = "Option::is_none")]
253 #[serde(default = "none_function")]
254 pub col: Option<Vec<Vec<u8>>>,
255
256 #[serde(skip_serializing_if = "Option::is_none")]
258 #[serde(default = "none_function")]
259 pub fx: Option<u16>,
260
261 #[serde(skip_serializing_if = "Option::is_none")]
263 #[serde(default = "none_function")]
264 pub sx: Option<u8>,
265
266 #[serde(skip_serializing_if = "Option::is_none")]
268 #[serde(default = "none_function")]
269 pub ix: Option<u8>,
270
271 #[serde(skip_serializing_if = "Option::is_none")]
273 #[serde(default = "none_function")]
274 pub pal: Option<u16>,
275
276 #[serde(skip_serializing_if = "Option::is_none")]
278 #[serde(default = "none_function")]
279 pub c1: Option<u8>,
280
281 #[serde(skip_serializing_if = "Option::is_none")]
283 #[serde(default = "none_function")]
284 pub c2: Option<u8>,
285
286 #[serde(skip_serializing_if = "Option::is_none")]
288 #[serde(default = "none_function")]
289 pub c3: Option<u8>,
290
291 #[serde(skip_serializing_if = "Option::is_none")]
293 #[serde(default = "none_function")]
294 pub sel: Option<bool>,
295
296 #[serde(skip_serializing_if = "Option::is_none")]
298 #[serde(default = "none_function")]
299 pub rev: Option<bool>,
300
301 #[serde(skip_serializing_if = "Option::is_none")]
303 #[serde(default = "none_function")]
304 pub mi: Option<bool>,
305
306 #[serde(skip_serializing_if = "Option::is_none")]
308 #[serde(default = "none_function")]
309 pub o1: Option<bool>,
310
311 #[serde(skip_serializing_if = "Option::is_none")]
313 #[serde(default = "none_function")]
314 pub o2: Option<bool>,
315
316 #[serde(skip_serializing_if = "Option::is_none")]
318 #[serde(default = "none_function")]
319 pub o3: Option<bool>,
320
321 #[serde(skip_serializing_if = "Option::is_none")]
323 #[serde(default = "none_function")]
324 pub si: Option<u8>,
325
326 #[serde(skip_serializing_if = "Option::is_none")]
328 #[serde(default = "none_function")]
329 pub m12: Option<u8>,
330}
331
332
333
334
335#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
336#[serde(rename_all = "camelCase")]
337pub struct Playlist {
338 #[serde(skip_serializing_if = "Option::is_none")]
340 #[serde(default = "none_function")]
341 pub ps: Option<Vec<u8>>,
342
343 #[serde(skip_serializing_if = "Option::is_none")]
345 #[serde(default = "none_function")]
346 pub dur: Option<Vec<u32>>,
347
348 #[serde(skip_serializing_if = "Option::is_none")]
350 #[serde(default = "none_function")]
351 pub transition: Option<u8>,
352
353 #[serde(skip_serializing_if = "Option::is_none")]
355 #[serde(default = "none_function")]
356 pub repeat: Option<u16>,
357
358 #[serde(skip_serializing_if = "Option::is_none")]
360 #[serde(default = "none_function")]
361 pub end: Option<u8>,
362}
363
364
365#[cfg(test)]
366mod tests {
367 use crate::structures::state::State;
368
369 #[test]
370 fn it_works() {
371 let s = r#"{"on":true,"bri":128,"transition":7,"ps":-1,"pl":-1,"nl":{"on":false,"dur":60,"mode":1,"tbri":0,"rem":-1},"udpn":{"send":false,"recv":true,"sgrp":1,"rgrp":1},"lor":0,"mainseg":0,"seg":[{"id":0,"start":0,"stop":6,"len":6,"grp":1,"spc":0,"of":0,"on":true,"frz":false,"bri":255,"cct":127,"set":0,"col":[[255,160,0],[0,0,0],[0,0,0]],"fx":0,"sx":128,"ix":128,"pal":0,"c1":128,"c2":128,"c3":16,"sel":true,"rev":false,"mi":false,"o1":false,"o2":false,"o3":false,"si":0,"m12":0}]}"#;
372 println!("og string: {:?}", s);
373 let a: &State = &State::try_from(s).unwrap();
374 println!("State object: {:?}", a);
375 let b: String = a.try_into().unwrap();
376 println!("converted object: {:?}", b);
377
378
379 }
380}