use std::error::Error;
use std::future::Future;
use tokio::io::{AsyncRead, AsyncWrite};
use tokio::net::TcpStream;
pub trait Acceptor: Clone {
type Accepted: Future<Output = Result<Self::Stream, Self::Error>> + Send + Sync;
type Stream: AsyncRead + AsyncWrite + Send + Sync + Unpin;
type Error: Error + Send + Sync;
fn accept(&mut self, stream: TcpStream) -> Self::Accepted;
}