Struct futures::prelude::stream::Peekable [−][src]
#[must_use = "streams do nothing unless polled"]pub struct Peekable<St> where
St: Stream, { /* fields omitted */ }
A Stream
that implements a peek
method.
The peek
method can be used to retrieve a reference
to the next Stream::Item
if available. A subsequent
call to poll
will return the owned item.
Implementations
impl<St> Peekable<St> where
St: Stream,
[src][−]
St: Stream,
pub fn get_ref(&self) -> &Stⓘ
[src][−]
Acquires a reference to the underlying sink or stream that this combinator is pulling from.
pub fn get_mut(&mut self) -> &mut Stⓘ
[src][−]
Acquires a mutable reference to the underlying sink or stream that this combinator is pulling from.
Note that care must be taken to avoid tampering with the state of the sink or stream which may otherwise confuse this combinator.
pub fn get_pin_mut(self: Pin<&mut Peekable<St>>) -> Pin<&mut St>ⓘ
[src][−]
Acquires a pinned mutable reference to the underlying sink or stream that this combinator is pulling from.
Note that care must be taken to avoid tampering with the state of the sink or stream which may otherwise confuse this combinator.
pub fn into_inner(self) -> St
[src][−]
Consumes this combinator, returning the underlying sink or stream.
Note that this may discard intermediate state of this combinator, so care should be taken to avoid losing resources when this is called.
pub fn peek(self: Pin<&mut Peekable<St>>) -> Peek<'_, St>ⓘ
[src][−]
Produces a Peek
future which retrieves a reference to the next item
in the stream, or None
if the underlying stream terminates.
pub fn poll_peek(
self: Pin<&mut Peekable<St>>,
cx: &mut Context<'_>
) -> Poll<Option<&<St as Stream>::Item>>
[src][−]
self: Pin<&mut Peekable<St>>,
cx: &mut Context<'_>
) -> Poll<Option<&<St as Stream>::Item>>
Peek retrieves a reference to the next item in the stream.
This method polls the underlying stream and return either a reference to the next item if the stream is ready or passes through any errors.
pub fn next_if<F>(self: Pin<&mut Peekable<St>>, func: F) -> NextIf<'_, St, F>ⓘ where
F: FnOnce(&<St as Stream>::Item) -> bool,
[src][−]
F: FnOnce(&<St as Stream>::Item) -> bool,
Creates a future which will consume and return the next value of this stream if a condition is true.
If func
returns true
for the next value of this stream, consume and
return it. Otherwise, return None
.
Examples
Consume a number if it’s equal to 0.
use futures::stream::{self, StreamExt}; use futures::pin_mut; let stream = stream::iter(0..5).peekable(); pin_mut!(stream); // The first item of the stream is 0; consume it. assert_eq!(stream.as_mut().next_if(|&x| x == 0).await, Some(0)); // The next item returned is now 1, so `consume` will return `false`. assert_eq!(stream.as_mut().next_if(|&x| x == 0).await, None); // `next_if` saves the value of the next item if it was not equal to `expected`. assert_eq!(stream.next().await, Some(1));
Consume any number less than 10.
use futures::stream::{self, StreamExt}; use futures::pin_mut; let stream = stream::iter(1..20).peekable(); pin_mut!(stream); // Consume all numbers less than 10 while stream.as_mut().next_if(|&x| x < 10).await.is_some() {} // The next value returned will be 10 assert_eq!(stream.next().await, Some(10));
pub fn next_if_eq<T>(
self: Pin<&'a mut Peekable<St>>,
expected: &'a T
) -> NextIfEq<'a, St, T>ⓘ where
T: ?Sized,
<St as Stream>::Item: PartialEq<T>,
[src][−]
self: Pin<&'a mut Peekable<St>>,
expected: &'a T
) -> NextIfEq<'a, St, T>ⓘ where
T: ?Sized,
<St as Stream>::Item: PartialEq<T>,
Creates a future which will consume and return the next item if it is
equal to expected
.
Example
Consume a number if it’s equal to 0.
use futures::stream::{self, StreamExt}; use futures::pin_mut; let stream = stream::iter(0..5).peekable(); pin_mut!(stream); // The first item of the stream is 0; consume it. assert_eq!(stream.as_mut().next_if_eq(&0).await, Some(0)); // The next item returned is now 1, so `consume` will return `false`. assert_eq!(stream.as_mut().next_if_eq(&0).await, None); // `next_if_eq` saves the value of the next item if it was not equal to `expected`. assert_eq!(stream.next().await, Some(1));
Trait Implementations
impl<St> Debug for Peekable<St> where
St: Debug + Stream,
<St as Stream>::Item: Debug,
[src][+]
St: Debug + Stream,
<St as Stream>::Item: Debug,
impl<St> FusedStream for Peekable<St> where
St: Stream,
[src][+]
St: Stream,
impl<S, Item> Sink<Item> for Peekable<S> where
S: Sink<Item> + Stream,
[src][+]
S: Sink<Item> + Stream,
impl<S> Stream for Peekable<S> where
S: Stream,
[src][+]
S: Stream,
impl<'__pin, St> Unpin for Peekable<St> where
St: Stream,
__Origin<'__pin, St>: Unpin,
[src]
St: Stream,
__Origin<'__pin, St>: Unpin,
Auto Trait Implementations
impl<St> RefUnwindSafe for Peekable<St> where
St: RefUnwindSafe,
<St as Stream>::Item: RefUnwindSafe,
St: RefUnwindSafe,
<St as Stream>::Item: RefUnwindSafe,
impl<St> Send for Peekable<St> where
St: Send,
<St as Stream>::Item: Send,
St: Send,
<St as Stream>::Item: Send,
impl<St> Sync for Peekable<St> where
St: Sync,
<St as Stream>::Item: Sync,
St: Sync,
<St as Stream>::Item: Sync,
impl<St> UnwindSafe for Peekable<St> where
St: UnwindSafe,
<St as Stream>::Item: UnwindSafe,
St: UnwindSafe,
<St as Stream>::Item: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src][+]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src][+]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src][+]
T: ?Sized,
impl<T> From<T> for T
[src][+]
impl<T, U> Into<U> for T where
U: From<T>,
[src][+]
U: From<T>,
impl<T, Item> SinkExt<Item> for T where
T: Sink<Item> + ?Sized,
[src][+]
T: Sink<Item> + ?Sized,
impl<T> StreamExt for T where
T: Stream + ?Sized,
[src][+]
T: Stream + ?Sized,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src][+]
U: Into<T>,
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src][+]
U: TryFrom<T>,
impl<S, T, E> TryStream for S where
S: Stream<Item = Result<T, E>> + ?Sized,
[src][+]
S: Stream<Item = Result<T, E>> + ?Sized,
impl<S> TryStreamExt for S where
S: TryStream + ?Sized,
[src][+]
S: TryStream + ?Sized,