diff --git a/src/proc_get.rs b/src/proc_get.rs index f78a83e..4ead0f5 100644 --- a/src/proc_get.rs +++ b/src/proc_get.rs @@ -313,8 +313,12 @@ impl Show for SignalReport { #[derive(Debug, Deserialize)] pub struct Device { pub device_version: BoxStr, + pub real_device_version: BoxStr, + pub build_time: BuildTime, + pub platform_version: BoxStr, pub sn: BoxStr, pub imei: BoxStr, + pub eth0_mac: BoxStr, pub online_time: Seconds, } @@ -359,8 +363,12 @@ impl Show for DeviceReport { table .set_header(["Device", "Value"]) .add_row(["Firmware Version", &self.device.device_version]) + .add_row(["Build Version", &self.device.real_device_version]) + .add_row(["Build Time", &self.device.build_time.to_string()]) + .add_row(["Platform", &self.device.platform_version]) .add_row(["S/N", &self.device.sn]) .add_row(["IMEI", &self.device.imei]) + .add_row(["Ethernet MAC", &self.device.eth0_mac]) .add_row(["SIM ICCID", or_dash(&self.sim.ziccid)]) .add_row(["Uptime", &self.device.online_time.to_string()]); diff --git a/src/types.rs b/src/types.rs index 5e4fd3e..82a9041 100644 --- a/src/types.rs +++ b/src/types.rs @@ -336,6 +336,25 @@ impl std::fmt::Display for MessageStatus { } } +/// The firmware build stamp in "YYYY-MM-DD_HH:MM" format ("2025-02-19_13:59"). +#[derive(Debug, Clone)] +pub struct BuildTime(jiff::civil::DateTime); + +impl<'de> Deserialize<'de> for BuildTime { + fn deserialize>(deserializer: D) -> Result { + let raw = BoxStr::deserialize(deserializer)?; + jiff::civil::DateTime::strptime("%Y-%m-%d_%H:%M", raw.trim()) + .map(Self) + .map_err(|e| D::Error::custom(format!("invalid build time {raw:?}: {e}"))) + } +} + +impl std::fmt::Display for BuildTime { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.0.strftime("%F %R")) + } +} + /// A timestamp in the router's "YY,MM,DD,HH,MM,SS,+TZ" format. #[derive(Debug, Clone)] pub struct Datetime {