pub(crate) mod conditioner;
pub mod io;
pub(crate) mod local;
pub(crate) mod udp;
#[cfg(feature = "webtransport")]
pub mod webtransport;
use std::io::Result;
use std::net::SocketAddr;
pub trait Transport {
fn local_addr(&self) -> SocketAddr;
fn listen(&mut self) -> (Box<dyn PacketSender>, Box<dyn PacketReceiver>);
}
pub trait PacketSender: Send + Sync {
fn send(&mut self, payload: &[u8], address: &SocketAddr) -> Result<()>;
}
impl PacketSender for Box<dyn PacketSender> {
fn send(&mut self, payload: &[u8], address: &SocketAddr) -> Result<()> {
(**self).send(payload, address)
}
}
pub trait PacketReceiver: Send + Sync {
fn recv(&mut self) -> Result<Option<(&mut [u8], SocketAddr)>>;
}
impl PacketReceiver for Box<dyn PacketReceiver> {
fn recv(&mut self) -> Result<Option<(&mut [u8], SocketAddr)>> {
(**self).recv()
}
}