在 rust / tokio 中合并流

nic*_*las 2 stream rust rust-tokio

tokio有一个合并数据结构,允许“合并”两个同构流并忘记出处。

impl<T, U> Stream for Merge<T, U> where
    T: Stream,
    U: Stream<Item = T::Item>, { ...
Run Code Online (Sandbox Code Playgroud)

是否存在流的代数逐点标记联合,它从 的流a和 的流b生成 的流Either a b

PS:我想答案是否定的,因为 Rust 显然没有标准的总和类型。

Pet*_*all 5

我不认为它是在 tokio 中直接作为方法提供的,但是你自己可以非常简单地将它拼凑起来。EitherRust 标准库中没有类型,但像大多数其他东西一样,有一个板条箱

use either::Either; // 0.3.7
use tokio::stream::StreamExt as _;

stream1
    .map(Either::Left)
    .merge(stream2.map(Either::Right))
Run Code Online (Sandbox Code Playgroud)