use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use serde_json::Error; use crate::metrics::Metrics; pub const STATUS_TOPIC: &str = "system/metrics"; #[derive(Debug, Serialize, Deserialize)] pub struct StatusMessage<'a> { pub agent: &'a str, pub metrics: Metrics, pub timestamp: DateTime, } impl<'a> StatusMessage<'a> { pub fn new(agent: &'a str, metrics: Metrics) -> Self { Self { agent, metrics, timestamp: Utc::now(), } } pub fn to_string(&self) -> Result { serde_json::to_string_pretty(&self) } } impl<'a> TryFrom<&'a [u8]> for StatusMessage<'a> { type Error = serde_json::Error; fn try_from(value: &'a [u8]) -> Result { serde_json::from_slice(value) } }