mondayio_compat/
lib.rs

1//! For compat with tokio AsyncRead and AsyncWrite.
2
3pub mod box_future;
4mod buf;
5
6mod safe_wrapper;
7mod tcp_unsafe;
8
9#[cfg(feature = "hyper")]
10pub mod hyper;
11
12pub use safe_wrapper::StreamWrapper;
13pub use tcp_unsafe::TcpStreamCompat as TcpStreamCompatUnsafe;
14pub use tokio::io::{AsyncRead, AsyncReadExt, AsyncWrite, AsyncWriteExt};
15
16pub type TcpStreamCompat = StreamWrapper<monoio::net::TcpStream>;
17#[cfg(unix)]
18pub type UnixStreamCompat = StreamWrapper<monoio::net::UnixStream>;
19
20#[cfg(test)]
21mod tests {
22
23    #[monoio::test_all]
24    async fn test_rw() {
25        let listener = monoio::net::TcpListener::bind("127.0.0.1:0").unwrap();
26        let addr = listener.local_addr().unwrap();
27        let server = async move {
28            let (conn, _) = listener.accept().await.unwrap();
29            let mut compat_conn = TcpStreamCompat::new(conn);
30
31            let mut buf = [0u8; 10];
32            compat_conn.read_exact(&mut buf).await.unwrap();
33            buf[0] += 1;
34            compat_conn.write_all(&buf).await.unwrap();
35        };
36        let client = async {
37            let conn = monoio::net::TcpStream::connect(addr).await.unwrap();
38            let mut compat_conn = TcpStreamCompat::new(conn);
39
40            let mut buf = [65u8; 10];
41            compat_conn.write_all(&buf).await.unwrap();
42            compat_conn.read_exact(&mut buf).await.unwrap();
43            assert_eq!(buf[0], 66);
44        };
45        monoio::spawn(server);
46        client.await;
47    }
48
49    #[monoio::test_all]
50    async fn test_rw_unsafe() {
51        let listener = monoio::net::TcpListener::bind("127.0.0.1:0").unwrap();
52        let addr = listener.local_addr().unwrap();
53        let server = async move {
54            let (conn, _) = listener.accept().await.unwrap();
55            let mut compat_conn = unsafe { TcpStreamCompatUnsafe::new(conn) };
56
57            let mut buf = [0u8; 10];
58            compat_conn.read_exact(&mut buf).await.unwrap();
59            buf[0] += 1;
60            compat_conn.write_all(&buf).await.unwrap();
61        };
62        let client = async {
63            let conn = monoio::net::TcpStream::connect(addr).await.unwrap();
64            let mut compat_conn = unsafe { TcpStreamCompatUnsafe::new(conn) };
65
66            let mut buf = [65u8; 10];
67            compat_conn.write_all(&buf).await.unwrap();
68            compat_conn.read_exact(&mut buf).await.unwrap();
69            assert_eq!(buf[0], 66);
70        };
71        monoio::spawn(server);
72        client.await;
73    }
74}