use thiserror::Error;
#[derive(Debug, Error)]
pub enum TransportError {
#[error("connection closed by peer")]
ConnectionClosed,
#[error("connection timed out")]
Timeout,
#[error("I/O error: {0}")]
Io(String),
#[error("TLS/QUIC error: {0}")]
Quic(String),
#[error("transport not connected")]
NotConnected,
}
#[async_trait::async_trait]
pub trait AsyncFrameTransport: Send + Sync {
async fn read(&mut self, buf: &mut [u8]) -> Result<usize, TransportError>;
async fn write_all(&mut self, data: &[u8]) -> Result<(), TransportError>;
async fn flush(&mut self) -> Result<(), TransportError> {
Ok(()) }
async fn close(&mut self) -> Result<(), TransportError> {
Ok(()) }
}