1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Default, Deserialize, Serialize)]
6pub struct Device {
7 #[serde(default)]
8 pub url: String,
9 #[serde(default)]
10 pub mac: Option<String>,
11 #[serde(default)]
12 pub manufacturer: Option<String>,
13 #[serde(default)]
14 pub ip: Option<String>,
15 #[serde(default)]
16 pub ips: Option<Vec<String>>,
17 #[serde(default)]
18 pub nickname: Option<String>,
19 #[serde(default)]
20 pub hostname: Option<String>,
21 #[serde(default)]
22 pub display_name: Option<String>,
23 #[serde(default)]
24 pub connected: Option<bool>,
25 #[serde(default)]
26 pub wireless: Option<bool>,
27 #[serde(default)]
28 pub connection_type: Option<String>,
29 #[serde(default)]
30 pub source: Option<DeviceSource>,
31 #[serde(default)]
32 pub profile: Option<DeviceProfile>,
33 #[serde(default)]
34 pub paused: Option<bool>,
35 #[serde(default)]
36 pub blocked: Option<bool>,
37 #[serde(default)]
38 pub is_guest: Option<bool>,
39 #[serde(default)]
40 pub is_private: Option<bool>,
41 #[serde(default)]
42 pub channel: Option<serde_json::Value>,
43 #[serde(default)]
44 pub frequency: Option<String>,
45 #[serde(default)]
46 pub frequency_band: Option<String>,
47 #[serde(default)]
48 pub auth: Option<String>,
49 #[serde(default)]
50 pub usage: Option<DeviceUsage>,
51 #[serde(flatten)]
52 pub extra: HashMap<String, serde_json::Value>,
53}
54
55#[derive(Debug, Clone, Deserialize, Serialize)]
56pub struct DeviceSource {
57 pub location: Option<String>,
58 pub url: Option<String>,
59}
60
61#[derive(Debug, Clone, Deserialize, Serialize)]
62pub struct DeviceProfile {
63 pub url: Option<String>,
64 pub name: Option<String>,
65}
66
67#[derive(Debug, Clone, Deserialize, Serialize)]
68pub struct DeviceUsage {
69 pub down: Option<f64>,
70 pub up: Option<f64>,
71}
72
73#[derive(Debug, Clone, Default, Serialize)]
74pub struct DeviceUpdate {
75 #[serde(skip_serializing_if = "Option::is_none")]
76 pub nickname: Option<String>,
77 #[serde(skip_serializing_if = "Option::is_none")]
78 pub blocked: Option<bool>,
79 #[serde(skip_serializing_if = "Option::is_none")]
80 pub paused: Option<bool>,
81 #[serde(skip_serializing_if = "Option::is_none")]
82 pub profile: Option<String>,
83}