1use serde_derive::{Deserialize, Serialize};
2use serde_json::Value;
3
4#[derive(Deserialize, Serialize, Debug, Clone)]
5pub struct NodesJSON {
6 pub version: u32,
7 pub timestamp: String,
8 pub nodes: Vec<Node>,
9}
10
11#[derive(Deserialize, Serialize, Debug, Clone)]
12pub struct Node {
13 pub firstseen: String,
14 pub lastseen: String,
15 pub flags: Flags,
16 pub statistics: Statistics,
17 pub nodeinfo: Nodeinfo,
18}
19
20#[derive(Deserialize, Serialize, Debug, Clone)]
21pub struct Flags {
22 pub online: bool,
23 pub gateway: bool,
24}
25
26#[derive(Deserialize, Serialize, Debug, Clone)]
27pub struct Processes {
28 pub total: u32,
29 pub running: u32,
30}
31
32#[derive(Deserialize, Serialize, Debug, Clone)]
33pub struct Statistics {
34 pub node_id: String,
35 pub clients: u32,
36 pub rootfs_usage: Option<f32>,
37 pub memory_usage: Option<f32>,
38 pub uptime: f32,
39 pub idletime: Option<f32>,
40 pub gateway: Option<String>,
41 pub gateway6: Option<String>,
42 pub processes: Processes,
43 pub traffic: Traffic,
44}
45
46#[derive(Deserialize, Serialize, Debug, Clone)]
47pub struct Groups {
48 pub backbone: Backbone,
49 pub groups: Option<u8>,
50}
51
52#[derive(Deserialize, Serialize, Debug, Clone)]
53pub struct Backbone {
54 pub peers: Peers,
55}
56
57#[derive(Deserialize, Serialize, Debug, Clone)]
58pub struct Peers {
59 pub sn01: Option<Peer>,
60 pub sn02: Option<Peer>,
61 pub sn03: Option<Peer>,
62 pub sn04: Option<Peer>,
63 pub sn05: Option<Peer>,
64 pub sn06: Option<Peer>,
65 pub sn07: Option<Peer>,
66 pub sn08: Option<Peer>,
67 pub sn09: Option<Peer>,
68 pub sn10: Option<Peer>,
69}
70
71#[derive(Deserialize, Serialize, Debug, Clone)]
72pub struct Peer {
73 pub established: f32,
74}
75
76#[derive(Deserialize, Serialize, Debug, Clone)]
77pub struct Traffic {
78 pub tx: Traffic0,
79 pub rx: Traffic0,
80 pub forward: Traffic0,
81 pub mgmt_tx: Traffic0,
82 pub mgmt_rx: Traffic0,
83}
84
85#[derive(Deserialize, Serialize, Debug, Clone)]
86pub struct Traffic0 {
87 pub bytes: Option<u64>,
88 pub dropped: Option<u64>,
89 pub packets: Option<u64>,
90}
91
92#[derive(Deserialize, Serialize, Debug, Clone)]
93pub struct Nodeinfo {
94 pub node_id: String,
95 pub network: Value, pub owner: Option<Owner>,
97 pub hostname: String,
98 pub location: Option<Location>,
99 pub software: Software,
100 pub hardware: Value, pub vpn: bool,
102}
103
104#[derive(Deserialize, Serialize, Debug, Clone)]
105pub struct Owner {
106 pub contact: String,
107}
108
109#[derive(Deserialize, Serialize, Debug, Clone)]
110pub struct System {
111 pub site_code: String,
112}
113
114#[derive(Deserialize, Serialize, Debug, Clone)]
115pub struct Location {
116 pub longitude: f64,
117 pub latitude: f64,
118}
119
120#[derive(Deserialize, Serialize, Debug, Clone)]
121pub struct Software {
122 pub autoupdater: Option<Autoupdater>,
123 #[serde(rename = "batman-adv")]
124 pub batman_adv: BatmanAdv,
125 pub firmware: Firmware,
126 pub wireguard: Option<Wireguard>,
127}
128
129#[derive(Deserialize, Serialize, Debug, Clone)]
130pub struct Autoupdater {
131 pub branch: String,
132}
133
134#[derive(Deserialize, Serialize, Debug, Clone)]
135pub struct BatmanAdv {
136 pub version: Option<String>,
137 pub compat: Option<u64>,
138}
139
140#[derive(Deserialize, Serialize, Debug, Clone)]
141pub struct Firmware {
142 pub base: Option<String>,
143 pub release: Option<String>,
144}
145
146#[derive(Deserialize, Serialize, Debug, Clone)]
147pub struct Wireguard {
148 pub version: String,
149}