1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Default, Deserialize, Serialize)]
6pub struct EeroNode {
7 pub url: String,
8 #[serde(default)]
9 pub serial: Option<String>,
10 #[serde(default)]
11 pub model: Option<String>,
12 #[serde(default)]
13 pub location: Option<String>,
14 #[serde(default)]
15 pub joined: Option<String>,
16 #[serde(default)]
17 pub os_version: Option<String>,
18 #[serde(default)]
19 pub status: Option<String>,
20 #[serde(default)]
21 pub status_light: Option<StatusLight>,
22 #[serde(default)]
23 pub connected_clients_count: Option<u32>,
24 #[serde(default)]
25 pub nightlight: Option<serde_json::Value>,
26 #[serde(default)]
27 pub gateway: Option<bool>,
28 #[serde(default)]
29 pub ip_address: Option<String>,
30 #[serde(default)]
31 pub mesh_quality_bars: Option<u32>,
32 #[serde(default)]
33 pub wired: Option<bool>,
34 #[serde(default)]
35 pub ethernet_addresses: Option<serde_json::Value>,
36 #[serde(default)]
37 pub update_available: Option<bool>,
38 #[serde(flatten)]
39 pub extra: HashMap<String, serde_json::Value>,
40}
41
42#[derive(Debug, Clone, Deserialize, Serialize)]
43pub struct StatusLight {
44 pub enabled: Option<bool>,
45 pub brightness: Option<u32>,
46}
47
48#[derive(Debug, Clone, Deserialize, Serialize)]
49pub struct Nightlight {
50 pub enabled: Option<bool>,
51 pub schedule: Option<NightlightSchedule>,
52 pub brightness: Option<u32>,
53}
54
55#[derive(Debug, Clone, Deserialize, Serialize)]
56pub struct NightlightSchedule {
57 pub on: Option<String>,
58 pub off: Option<String>,
59}
60
61#[derive(Debug, Clone, Deserialize, Serialize)]
62pub struct EthernetAddress {
63 pub mac: Option<String>,
64}
65
66#[derive(Debug, Clone, Default, Serialize)]
67pub struct EeroUpdate {
68 #[serde(skip_serializing_if = "Option::is_none")]
69 pub location: Option<String>,
70 #[serde(skip_serializing_if = "Option::is_none")]
71 pub led_on: Option<bool>,
72 #[serde(skip_serializing_if = "Option::is_none")]
73 pub nightlight: Option<NightlightUpdate>,
74}
75
76#[derive(Debug, Clone, Default, Serialize)]
77pub struct NightlightUpdate {
78 #[serde(skip_serializing_if = "Option::is_none")]
79 pub enabled: Option<bool>,
80 #[serde(skip_serializing_if = "Option::is_none")]
81 pub brightness: Option<u32>,
82 #[serde(skip_serializing_if = "Option::is_none")]
83 pub schedule: Option<NightlightScheduleUpdate>,
84}
85
86#[derive(Debug, Clone, Default, Serialize)]
87pub struct NightlightScheduleUpdate {
88 #[serde(skip_serializing_if = "Option::is_none")]
89 pub on: Option<String>,
90 #[serde(skip_serializing_if = "Option::is_none")]
91 pub off: Option<String>,
92}