diff --git a/src/transport/ethernet/stats.rs b/src/transport/ethernet/stats.rs index c20492f..0346232 100644 --- a/src/transport/ethernet/stats.rs +++ b/src/transport/ethernet/stats.rs @@ -2,6 +2,8 @@ use portable_atomic::{AtomicU64, Ordering}; +use serde::Serialize; + /// Statistics for an Ethernet transport instance. /// /// Uses atomic counters for lock-free updates from the receive loop @@ -92,7 +94,7 @@ impl Default for EthernetStats { } /// Point-in-time snapshot of Ethernet stats (non-atomic, copyable). -#[derive(Clone, Debug, Default)] +#[derive(Clone, Debug, Default, Serialize)] pub struct EthernetStatsSnapshot { pub frames_sent: u64, pub frames_recv: u64, diff --git a/src/transport/mod.rs b/src/transport/mod.rs index 5128ce8..dadc520 100644 --- a/src/transport/mod.rs +++ b/src/transport/mod.rs @@ -1022,19 +1022,7 @@ impl TransportHandle { } #[cfg(unix)] TransportHandle::Ethernet(t) => { - let snap = t.stats().snapshot(); - serde_json::json!({ - "frames_sent": snap.frames_sent, - "frames_recv": snap.frames_recv, - "bytes_sent": snap.bytes_sent, - "bytes_recv": snap.bytes_recv, - "send_errors": snap.send_errors, - "recv_errors": snap.recv_errors, - "beacons_sent": snap.beacons_sent, - "beacons_recv": snap.beacons_recv, - "frames_too_short": snap.frames_too_short, - "frames_too_long": snap.frames_too_long, - }) + serde_json::to_value(t.stats().snapshot()).unwrap_or_default() } TransportHandle::Tcp(t) => { serde_json::to_value(t.stats().snapshot()).unwrap_or_default()