Crate tokio_stream
source ·Expand description
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.
Re-exports
pub use futures_core::Stream;
Modules
- Wrappers for Tokio types that implement
Stream
.
Structs
- Stream for the
empty
function. - Stream for the
iter
function. - Stream for the
once
function. - Stream for the
pending
function. - Combine many streams into one, indexing each source stream with a unique key.
- A
Stream
that wraps the values in anOption
.
Traits
- Convert from a
Stream
. - An extension trait for the
Stream
trait that provides a variety of convenient combinator functions.
Functions
- Creates a stream that yields nothing.
- Converts an
Iterator
into aStream
which is always ready to yield the next value. - Creates a stream that emits an element exactly once.
- Creates a stream that is never ready