futures_util

Macro stream_select

source
macro_rules! stream_select {
    ($($tokens:tt)*) => { ... };
}
Expand description

Combines several streams, all producing the same Item type, into one stream. This is similar to select_all but does not require the streams to all be the same type. It also keeps the streams inline, and does not require Box<dyn Stream>s to be allocated. Streams passed to this macro must be Unpin.

If multiple streams are ready, one will be pseudo randomly selected at runtime.

ยงExamples

use futures::{stream, StreamExt, stream_select};
let endless_ints = |i| stream::iter(vec![i].into_iter().cycle()).fuse();

let mut endless_numbers = stream_select!(endless_ints(1i32), endless_ints(2), endless_ints(3));
match endless_numbers.next().await {
    Some(1) => println!("Got a 1"),
    Some(2) => println!("Got a 2"),
    Some(3) => println!("Got a 3"),
    _ => unreachable!(),
}