async_stream_connection/
lib.rs

1/*! A simple enum that supports [`tokio::io::AsyncRead`] and [`tokio::io::AsyncWrite`] on TCP as well as Unix sockets.
2 *
3 *
4 *  # Example
5 * 
6 *  A simple TCP echo server:
7 * 
8 *  ```no_run
9 *  use async_stream_connection::Listener;
10 *  use tokio::io::{AsyncReadExt, AsyncWriteExt};
11 * 
12 *  #[tokio::main(flavor = "current_thread")]
13 *  async fn main() -> Result<(), Box<dyn std::error::Error>> {
14 *      let listener = Listener::bind(&"127.0.0.1:8080".parse()?).await?;
15 * 
16 *      loop {
17 *          let (mut socket, _) = listener.accept().await?;
18 * 
19 *          tokio::spawn(async move {
20 *              let mut buf = [0; 1024];
21 * 
22 *              // In a loop, read data from the socket and write the data back.
23 *              loop {
24 *                  let n = match socket.read(&mut buf).await {
25 *                      // socket closed
26 *                      Ok(n) if n == 0 => return,
27 *                      Ok(n) => n,
28 *                      Err(e) => {
29 *                          eprintln!("failed to read from socket; err = {:?}", e);
30 *                          return;
31 *                      }
32 *                  };
33 * 
34 *                  // Write the data back
35 *                  if let Err(e) = socket.write_all(&buf[0..n]).await {
36 *                      eprintln!("failed to write to socket; err = {:?}", e);
37 *                      return;
38 *                  }
39 *              }
40 *          });
41 *      }
42 *  }
43 *  ```
44 */
45#![cfg_attr(docsrs, feature(doc_cfg))]
46
47mod addr;
48mod stream;
49mod listener;
50
51pub use addr::Addr;
52pub use stream::Stream;
53pub use listener::Listener;
54