nodes_parse/
lib.rs

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, // TODO: implement
96    pub owner: Option<Owner>,
97    pub hostname: String,
98    pub location: Option<Location>,
99    pub software: Software,
100    pub hardware: Value, // TODO: implement
101    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}