use crate::wire::{Payload};
#[cfg(feature = "std")]
use crate::wire::{pretty_print::Formatter, PrettyPrinter, ethernet};
mod endpoint;
mod packet;
pub use endpoint::{
Endpoint,
Receiver,
Sender,
};
pub use packet::{
Controller,
Init,
In as InPacket,
Out as OutPacket,
Raw as RawPacket,
};
pub trait Recv<P: Payload> {
fn receive(&mut self, frame: InPacket<P>);
}
pub trait Send<P: Payload> {
fn send(&mut self, raw: RawPacket<P>);
}
#[cfg(feature = "std")]
impl<P: Payload> Recv<P> for Formatter<ethernet::frame> {
fn receive(&mut self, frame: InPacket<P>) {
let printer = PrettyPrinter::<ethernet::frame>::print(&frame.frame);
eprintln!("{}", printer);
}
}
impl<P: Payload, E> Recv<P> for &'_ mut E
where E: Recv<P>
{
fn receive(&mut self, frame: InPacket<P>) {
(**self).receive(frame)
}
}
impl<P: Payload, E> Send<P> for &'_ mut E
where E: Send<P>
{
fn send(&mut self, frame: RawPacket<P>) {
(**self).send(frame)
}
}