mirror of
https://github.com/async-rs/async-std.git
synced 2025-01-31 01:35:33 +00:00
add stream::FusedStream
Signed-off-by: Yoshua Wuyts <yoshuawuyts@gmail.com>
This commit is contained in:
parent
454018ef42
commit
3ac4575d94
2 changed files with 23 additions and 0 deletions
21
src/stream/fused_stream.rs
Normal file
21
src/stream/fused_stream.rs
Normal file
|
@ -0,0 +1,21 @@
|
|||
use crate::stream::Stream;
|
||||
|
||||
/// A stream that always continues to yield `None` when exhausted.
|
||||
///
|
||||
/// Calling next on a fused stream that has returned `None` once is guaranteed
|
||||
/// to return [`None`] again. This trait should be implemented by all streams
|
||||
/// that behave this way because it allows optimizing [`Stream::fuse`].
|
||||
///
|
||||
/// Note: In general, you should not use `FusedStream` in generic bounds if
|
||||
/// you need a fused stream. Instead, you should just call [`Stream::fuse`]
|
||||
/// on the stream. If the stream is already fused, the additional [`Fuse`]
|
||||
/// wrapper will be a no-op with no performance penalty.
|
||||
///
|
||||
/// [`None`]: https://doc.rust-lang.org/std/option/enum.Option.html#variant.None
|
||||
/// [`Stream::fuse`]: trait.Stream.html#method.fuse
|
||||
/// [`Fuse`]: struct.Fuse.html
|
||||
#[cfg(any(feature = "unstable", feature = "docs"))]
|
||||
#[cfg_attr(feature = "docs", doc(cfg(unstable)))]
|
||||
pub trait FusedStream: Stream {}
|
||||
|
||||
impl<S: FusedStream + ?Sized + Unpin> FusedStream for &mut S {}
|
|
@ -37,6 +37,7 @@ mod repeat;
|
|||
cfg_if! {
|
||||
if #[cfg(any(feature = "unstable", feature = "docs"))] {
|
||||
mod double_ended_stream;
|
||||
mod fused_stream;
|
||||
mod extend;
|
||||
mod from_stream;
|
||||
mod into_stream;
|
||||
|
@ -45,6 +46,7 @@ cfg_if! {
|
|||
pub use extend::Extend;
|
||||
pub use from_stream::FromStream;
|
||||
pub use into_stream::IntoStream;
|
||||
pub use fused_stream::FusedStream;
|
||||
|
||||
pub use stream::Merge;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue