17 releases

0.1.16 Sep 5, 2024
0.1.15 Mar 14, 2024
0.1.14 Apr 26, 2023
0.1.12 Feb 20, 2023
0.1.0 Dec 23, 2020

#216 in Asynchronous

Download history 1123722/week @ 2024-08-04 1173797/week @ 2024-08-11 1191514/week @ 2024-08-18 1193719/week @ 2024-08-25 1171944/week @ 2024-09-01 1244937/week @ 2024-09-08 1143984/week @ 2024-09-15 1281834/week @ 2024-09-22 1292211/week @ 2024-09-29 1333983/week @ 2024-10-06 1348673/week @ 2024-10-13 1448635/week @ 2024-10-20 1392510/week @ 2024-10-27 1465966/week @ 2024-11-03 1356189/week @ 2024-11-10 1299127/week @ 2024-11-17

5,582,780 downloads per month
Used in 7,054 crates (1,527 directly)

MIT license

3MB
40K SLoC

tokio-stream

Utilities to work with Stream and tokio.

License

This project is licensed under the MIT license.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Tokio by you, shall be licensed as MIT, without any additional terms or conditions.


lib.rs:

Stream utilities for Tokio.

A Stream is an asynchronous sequence of values. It can be thought of as an asynchronous version of the standard library's Iterator trait.

This crate provides helpers to work with them. For examples of usage and a more in-depth description of streams you can also refer to the streams tutorial on the tokio website.

Iterating over a Stream

Due to similarities with the standard library's Iterator trait, some new users may assume that they can use for in syntax to iterate over a Stream, but this is unfortunately not possible. Instead, you can use a while let loop as follows:

use tokio_stream::{self as stream, StreamExt};

#[tokio::main]
async fn main() {
    let mut stream = stream::iter(vec![0, 1, 2]);

    while let Some(value) = stream.next().await {
        println!("Got {}", value);
    }
}

Returning a Stream from a function

A common way to stream values from a function is to pass in the sender half of a channel and use the receiver as the stream. This requires awaiting both futures to ensure progress is made. Another alternative is the async-stream crate, which contains macros that provide a yield keyword and allow you to return an impl Stream.

Conversion to and from AsyncRead/AsyncWrite

It is often desirable to convert a Stream into an AsyncRead, especially when dealing with plaintext formats streamed over the network. The opposite conversion from an AsyncRead into a Stream is also another commonly required feature. To enable these conversions, tokio-util provides the StreamReader and ReaderStream types when the io feature is enabled.

Dependencies

~0–7MB
~47K SLoC