1 个不稳定版本
0.3.1 | 2020年5月31日 |
---|
#13 在 #remember
13KB
147 行(不包括注释)
stream-unconsume
部分轮询流并获取已发出的项目!有时让某人轮询你的流,但又能将其恢复原样,这很有用。为此,这个 crate 提供了函数 remember
,它接受流,返回一个包含未来和流的元组。您可以将返回的流移动到任何函数中,从而丢失它,但当它被丢弃时,从 remember
返回的未来将与新的流解析,该流提供了从原始流中消费的所有项目,以及该流的其余部分,因此您可以像从未轮询原始流一样使用它。
您可以使用任何类型作为缓冲区,只要它实现了 IntoIterator<Item=Source::Item>
和 Push<Source::Item>
,其中 Source
是您想要反消费的流的类型。有一个方便的函数 remember_vec
,用于使用 Vec
作为缓冲区后端(其他后端可能是 LinkedList
、VecDeque
等)。我们使用 Push
而不是,例如,PushBack
,让用户在需要时忽略顺序。例如,考虑如果您将流收集到 HashSet 中。如果您这样做,则在元素到达时就会跳过重复的元素。但是,如果您使用我们的 remember_vec
函数,StreamBuffer 将保留所有这些重复元素,消耗内存,让您在获取流返回时再丢弃它们。注意,Push
将使用这种方法添加元素,如果后端集合保留插入顺序(例如 Vec
但不是 HashSet
),则对该集合的迭代也将是按插入顺序进行的。换句话说,如果您使用 LinkedList
,则 Push
将执行 push_back
,而不是您可能期望的 push_front
。注意:Rust 不保证总是调用 Drop,因此您在等待返回的未来时可能需要使用超时,否则您将无限期地等待其解析!
当前版本:0.3.0
许可证:MIT 或 Apache-2.0
依赖关系
~1MB
~16K SLoC