在 rust / tokio 中合并流

merging streams in rust / tokio

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

impl<T, U> Stream for Merge<T, U> where
    T: Stream,
    U: Stream<Item = T::Item>, { ...

是否有流的代数逐点标记并集,它从 a 流和 b 流产生 Either a b 流?

PS :我想答案是 因为 rust 显然没有标准的总和类型..

我不认为它在 tokio 中直接作为方法提供,但是您自己非常简单地将它拼凑在一起。 Rust 标准库中没有 Either 类型,但像大多数其他东西一样,有 a crate 类型。

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

stream1
    .map(Either::Left)
    .merge(stream2.map(Either::Right))