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