use serde::{Deserialize, Serialize};
use crate::bus::abi::CodecId;
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct BusMetadata {
pub api_version: String,
pub family: String,
pub codec: u8,
pub produced_at_ns: u64,
pub epoch: u64,
pub source: Source,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct Source {
pub participant: String,
pub incarnation: u64,
pub sequence: u64,
}
impl BusMetadata {
pub fn encode(&self) -> Vec<u8> {
rmp_serde::to_vec_named(self).expect("BusMetadata is always serializable")
}
pub fn decode(bytes: &[u8]) -> Result<Self, rmp_serde::decode::Error> {
rmp_serde::from_slice(bytes)
}
pub fn codec_id(&self) -> Option<CodecId> {
CodecId::from_u8(self.codec)
}
}