Skip to main content

eero_api/types/
network.rs

1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Deserialize, Serialize)]
6pub struct Network {
7    pub url: String,
8    pub name: Option<String>,
9    #[serde(default)]
10    pub password: Option<String>,
11    #[serde(default)]
12    pub health: Option<NetworkHealth>,
13    #[serde(default)]
14    pub speed: Option<SpeedInfo>,
15    #[serde(default)]
16    pub clients: Option<ClientCount>,
17    #[serde(default)]
18    pub eeros: Option<EeroCount>,
19    #[serde(default)]
20    pub profiles: Option<ProfileCount>,
21    #[serde(default)]
22    pub dns: Option<serde_json::Value>,
23    #[serde(default)]
24    pub guest_network: Option<GuestNetwork>,
25    #[serde(default)]
26    pub sqm: Option<serde_json::Value>,
27    #[serde(default)]
28    pub band_steering: Option<serde_json::Value>,
29    #[serde(default)]
30    pub thread: Option<serde_json::Value>,
31    #[serde(default)]
32    pub upnp: Option<serde_json::Value>,
33    #[serde(default)]
34    pub ipv6: Option<serde_json::Value>,
35    #[serde(default)]
36    pub wpa3: Option<serde_json::Value>,
37    #[serde(default)]
38    pub target_firmware: Option<String>,
39    #[serde(default)]
40    pub updates: Option<serde_json::Value>,
41    #[serde(default)]
42    pub timezone: Option<Timezone>,
43    #[serde(default)]
44    pub premium_dns: Option<serde_json::Value>,
45    #[serde(default)]
46    pub premium_status: Option<String>,
47    #[serde(flatten)]
48    pub extra: HashMap<String, serde_json::Value>,
49}
50
51#[derive(Debug, Clone, Deserialize, Serialize)]
52pub struct NetworkHealth {
53    #[serde(default)]
54    pub internet: Option<HealthStatus>,
55    #[serde(default)]
56    pub eero_network: Option<HealthStatus>,
57}
58
59#[derive(Debug, Clone, Deserialize, Serialize)]
60pub struct HealthStatus {
61    pub status: Option<String>,
62    #[serde(flatten)]
63    pub extra: HashMap<String, serde_json::Value>,
64}
65
66#[derive(Debug, Clone, Deserialize, Serialize)]
67pub struct SpeedInfo {
68    pub down: Option<SpeedValue>,
69    pub up: Option<SpeedValue>,
70    #[serde(flatten)]
71    pub extra: HashMap<String, serde_json::Value>,
72}
73
74#[derive(Debug, Clone, Deserialize, Serialize)]
75pub struct SpeedValue {
76    pub value: Option<f64>,
77    pub units: Option<String>,
78}
79
80#[derive(Debug, Clone, Deserialize, Serialize)]
81pub struct ClientCount {
82    pub count: Option<u32>,
83    pub url: Option<String>,
84}
85
86#[derive(Debug, Clone, Deserialize, Serialize)]
87pub struct EeroCount {
88    pub count: Option<u32>,
89    #[serde(flatten)]
90    pub extra: HashMap<String, serde_json::Value>,
91}
92
93#[derive(Debug, Clone, Deserialize, Serialize)]
94pub struct ProfileCount {
95    pub count: Option<u32>,
96    pub url: Option<String>,
97}
98
99#[derive(Debug, Clone, Deserialize, Serialize)]
100pub struct GuestNetwork {
101    pub name: Option<String>,
102    pub password: Option<String>,
103    pub enabled: Option<bool>,
104    pub url: Option<String>,
105    #[serde(flatten)]
106    pub extra: HashMap<String, serde_json::Value>,
107}
108
109#[derive(Debug, Clone, Deserialize, Serialize)]
110pub struct Timezone {
111    pub value: Option<String>,
112    #[serde(flatten)]
113    pub extra: HashMap<String, serde_json::Value>,
114}
115
116#[derive(Debug, Clone, Default, Serialize)]
117pub struct NetworkUpdate {
118    #[serde(skip_serializing_if = "Option::is_none")]
119    pub name: Option<String>,
120    #[serde(skip_serializing_if = "Option::is_none")]
121    pub password: Option<String>,
122    #[serde(skip_serializing_if = "Option::is_none")]
123    pub sqm: Option<bool>,
124    #[serde(skip_serializing_if = "Option::is_none")]
125    pub band_steering: Option<bool>,
126    #[serde(skip_serializing_if = "Option::is_none")]
127    pub thread: Option<bool>,
128    #[serde(skip_serializing_if = "Option::is_none")]
129    pub upnp: Option<bool>,
130    #[serde(skip_serializing_if = "Option::is_none")]
131    pub ipv6: Option<bool>,
132    #[serde(skip_serializing_if = "Option::is_none")]
133    pub wpa3: Option<bool>,
134    #[serde(skip_serializing_if = "Option::is_none")]
135    pub dns: Option<DnsUpdate>,
136}
137
138#[derive(Debug, Clone, Default, Serialize)]
139pub struct DnsUpdate {
140    #[serde(skip_serializing_if = "Option::is_none")]
141    pub parent: Option<String>,
142    #[serde(skip_serializing_if = "Option::is_none")]
143    pub custom: Option<bool>,
144    #[serde(skip_serializing_if = "Option::is_none")]
145    pub caching: Option<bool>,
146}
147
148#[derive(Debug, Clone, Default, Serialize)]
149pub struct GuestNetworkUpdate {
150    #[serde(skip_serializing_if = "Option::is_none")]
151    pub name: Option<String>,
152    #[serde(skip_serializing_if = "Option::is_none")]
153    pub password: Option<String>,
154    #[serde(skip_serializing_if = "Option::is_none")]
155    pub enabled: Option<bool>,
156}
157
158#[derive(Debug, Clone, Deserialize, Serialize)]
159pub struct SpeedTest {
160    #[serde(default)]
161    pub date: Option<String>,
162    #[serde(default)]
163    pub up_mbps: Option<f64>,
164    #[serde(default)]
165    pub down_mbps: Option<f64>,
166    #[serde(flatten)]
167    pub extra: HashMap<String, serde_json::Value>,
168}