use crate::MarshalerError;
type Result<T> = core::result::Result<T, MarshalerError>;
#[doc(alias("Marshal", "Unmarshal", "Serialize", "Deserialize"))]
pub trait Marshaler: Sized {
const CMD_ID: u16;
const PAYLOAD_SIZE: u16;
fn marshal(&self, dst: &mut [u8]) -> Result<usize>;
fn unmarshal(raw: &[u8]) -> Result<Self>;
}
pub trait ImplCommandMsg: Sized {
const CMD_ID: u16;
const PAYLOAD_SIZE: u16;
}
impl<T: Marshaler> ImplCommandMsg for T {
const CMD_ID: u16 = T::CMD_ID;
const PAYLOAD_SIZE: u16 = T::PAYLOAD_SIZE;
}
pub trait ImplMarshal: ImplCommandMsg {
fn marshal(&self, dst: &mut [u8]) -> Result<usize>;
}
impl<T: Marshaler> ImplMarshal for T {
fn marshal(&self, dst: &mut [u8]) -> Result<usize> {
T::marshal(self, dst)
}
}
pub trait ImplUnMarshal: ImplCommandMsg {
fn unmarshal(raw: &[u8]) -> Result<Self>;
}
impl<T: Marshaler> ImplUnMarshal for T {
fn unmarshal(raw: &[u8]) -> Result<Self> {
T::unmarshal(raw)
}
}