use crate::clock::Instant;
use acex_core::Vec;
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct NodeAddress(pub u32);
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(all(feature = "defmt", not(feature = "alloc")), derive(defmt::Format))]
pub struct RawMessage<const MAX_DATA: usize> {
pub src: NodeAddress,
pub dst: NodeAddress,
pub data: Vec<u8, MAX_DATA>,
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)>;
}