1#![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}