use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
pub const GAN_OVERVIEW_PATH: &str = "/data/api/v1/overview/gan";
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GanStatusWire {
#[serde(rename = "totalConnections", alias = "total_connections", default)]
pub total_connections: i64,
#[serde(rename = "runningConnections", alias = "running_connections", default)]
pub running_connections: i64,
#[serde(rename = "outgoingByteRate", alias = "outgoing_byte_rate", default)]
pub outgoing_byte_rate: f64,
#[serde(rename = "incomingByteRate", alias = "incoming_byte_rate", default)]
pub incoming_byte_rate: f64,
#[serde(rename = "remoteGateways", alias = "remote_gateways", default)]
pub remote_gateways: i64,
#[serde(flatten)]
pub extra: BTreeMap<String, serde_json::Value>,
}
#[cfg(test)]
mod tests {
use super::GanStatusWire;
#[test]
fn gan_parses_the_live_zero_connection_capture() {
let wire: GanStatusWire = serde_json::from_value(serde_json::json!({
"totalConnections": 0,
"runningConnections": 0,
"outgoingByteRate": 0.0,
"incomingByteRate": 0.0,
"remoteGateways": 0
}))
.expect("the live zero-connection shape must parse");
assert_eq!(wire.total_connections, 0);
assert_eq!(wire.running_connections, 0);
assert_eq!(wire.outgoing_byte_rate, 0.0);
assert_eq!(wire.incoming_byte_rate, 0.0);
assert_eq!(wire.remote_gateways, 0);
}
#[test]
fn gan_tolerant_over_populated_and_unknown_shapes() {
let wire: GanStatusWire = serde_json::from_value(serde_json::json!({
"totalConnections": 4,
"runningConnections": 2,
"outgoingByteRate": 15360,
"incomingByteRate": 2048.5,
"remoteGateways": 1,
"futurePointReleaseField": {"rate": 1.25}
}))
.expect("whole-number + unknown-key forms must parse");
assert_eq!(wire.total_connections, 4);
assert_eq!(wire.running_connections, 2);
assert_eq!(wire.outgoing_byte_rate, 15360.0, "f64 parses ints too");
assert_eq!(wire.incoming_byte_rate, 2048.5);
assert_eq!(wire.remote_gateways, 1);
assert_eq!(
wire.extra.get("futurePointReleaseField"),
Some(&serde_json::json!({"rate": 1.25})),
"unknown keys ride flatten passthrough"
);
}
}