use core::task;
use std::task::Poll;
use bytes::Buf;
use h3::quic::ConnectionErrorIncoming;
use crate::datagram::EncodedDatagram;
pub trait DatagramConnectionExt<B: Buf> {
type SendDatagramHandler: SendDatagram<B>;
type RecvDatagramHandler: RecvDatagram;
fn send_datagram_handler(&self) -> Self::SendDatagramHandler;
fn recv_datagram_handler(&self) -> Self::RecvDatagramHandler;
}
pub trait SendDatagram<B: Buf> {
fn send_datagram<T: Into<EncodedDatagram<B>>>(
&mut self,
data: T,
) -> Result<(), SendDatagramErrorIncoming>;
}
pub trait RecvDatagram {
type Buffer: Buf;
fn poll_incoming_datagram(
&mut self,
cx: &mut task::Context<'_>,
) -> Poll<Result<Self::Buffer, ConnectionErrorIncoming>>;
}
#[derive(Debug)]
pub enum SendDatagramErrorIncoming {
NotAvailable,
TooLarge,
ConnectionError(ConnectionErrorIncoming),
}