1use tokio::io::{AsyncRead, AsyncWrite};
2use async_trait::async_trait;
3
4#[async_trait]
10pub trait AsyncProxy {
11 type OutputStream: AsyncRead + AsyncWrite;
12 type ErrorKind;
13 type ConnParams;
14
15 async fn connect(&mut self, params: Self::ConnParams)
17 -> Result<Self::OutputStream, Self::ErrorKind>;
18
19 async fn write_buffer(&mut self, buffer: &[u8], stream: Self::OutputStream)
21 -> Result<Self::OutputStream, Self::ErrorKind>;
22
23 async fn read_buffer(&mut self, buffer: &mut [u8], stream: Self::OutputStream)
25 -> Result<Self::OutputStream, Self::ErrorKind>;
26
27 async fn drop_stream(&mut self, stream: Self::OutputStream)
29 -> Result<(), Self::ErrorKind>;
30}