src/msg.rs
pub mod body;
pub mod header;
use crate::{scalar::ScalarError, slice::SliceError};
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub enum MsgError {
Header(ScalarError),
ScalarBody(ScalarError),
SliceBody(SliceError),
IncorrectHeader,
}
pub trait WriteMsg: Sized {
fn write_msg(&self, buf: &mut &mut [u8]) -> Result<(), MsgError> {
self.write_msg_header(buf)?;
self.write_msg_body(buf)
}
fn write_msg_header(&self, buf: &mut &mut [u8]) -> Result<(), MsgError>;
fn write_msg_body(&self, buf: &mut &mut [u8]) -> Result<(), MsgError>;
}
pub trait ReadMsg<'a>: Sized {
type Header;
fn read_msg(buf: &mut &'a [u8]) -> Result<Self, MsgError> {
let header = Self::read_msg_header(buf)?;
Self::read_msg_body(buf, header)
}
fn read_msg_header(buf: &mut &'a [u8]) -> Result<Self::Header, MsgError>;
fn read_msg_body(buf: &mut &'a [u8], header: Self::Header) -> Result<Self, MsgError>;
}