monoio_compat/
lib.rs

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