use crate::error::TransportError;
use async_trait::async_trait;
use std::net::SocketAddr;
#[async_trait]
pub trait Transport: Send + Sync {
async fn connect(&mut self, addr: SocketAddr) -> Result<(), TransportError>;
async fn disconnect(&mut self) -> Result<(), TransportError>;
}
#[async_trait]
pub trait SendStream: Send + Sync {
async fn send(&mut self, data: &[u8]) -> Result<usize, TransportError>;
}
#[async_trait]
pub trait ReceiveStream: Send + Sync {
async fn receive(&mut self) -> Result<Vec<u8>, TransportError>;
}
#[async_trait]
pub trait TransportStream: SendStream + ReceiveStream {}
#[async_trait]
pub trait TransportListener {
async fn listen(&mut self, addr: SocketAddr) -> Result<(), TransportError>;
async fn close(&self) -> Result<(), TransportError>;
async fn handle_connection(stream: Box<dyn TransportStream>) -> Result<(), TransportError>;
}
#[async_trait]
pub trait TransportClient: Transport {
fn stream(&mut self) -> &mut dyn TransportStream;
}