use crate::clock::Instant;
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct NodeAddress(pub u32);
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct RawMessage<const N: usize> {
pub src: NodeAddress,
pub dst: NodeAddress,
pub data: heapless::Vec<u8, N>,
pub timestamp: Instant,
}
pub trait FrameTransport<const N: usize> {
type Error: core::fmt::Debug;
fn send(&mut self, dst: &NodeAddress, data: &[u8]) -> Result<(), Self::Error>;
fn recv(&mut self) -> Option<RawMessage<N>>;
}
pub trait MessageTransport {
type Message: core::fmt::Debug;
type Error: core::fmt::Debug;
fn send(&mut self, dst: &NodeAddress, message: Self::Message) -> Result<(), Self::Error>;
fn recv(&mut self) -> Option<(NodeAddress, Self::Message)>;
}