use serde::{Deserialize, Serialize};
use std::fmt::{Debug, Display};
mod serde_datetime;
#[derive(Debug, Serialize, Deserialize, PartialEq)]
pub struct SystemStatus {
firmware: FirmwareSystemStatus,
hardware: HardwareSystemStatus,
time: TimeSystemStatus,
}
#[derive(Debug, Serialize, Deserialize, PartialEq)]
pub struct FirmwareSystemStatus {
version: semver::Version,
updates: FirmwareUpdatesSystemStatus,
}
#[derive(Debug, Serialize, Deserialize, PartialEq)]
pub struct FirmwareUpdatesSystemStatus {
enabled: bool,
}
#[derive(Debug, Serialize, Deserialize, PartialEq)]
pub struct HardwareSystemStatus {
version: semver::Version,
serial_number: SerialNumber,
}
#[derive(Debug, Serialize, Deserialize, PartialEq)]
pub struct TimeSystemStatus {
milliseconds_since_boot: u64,
seconds_since_boot: u64,
#[serde(with = "serde_datetime", rename = "epoch_time")]
current_time: chrono::DateTime<chrono::Utc>,
}
#[derive(Serialize, Deserialize, PartialEq)]
pub struct SerialNumber(String);
impl Display for SerialNumber {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.0)
}
}
impl Debug for SerialNumber {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self)
}
}