pub struct Peekable<St: Stream> { /* private fields */ }
Expand description

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§

source§

impl<St: Stream> Peekable<St>

source

pub fn get_ref(&self) -> &St

Acquires a reference to the underlying sink or stream that this combinator is pulling from.

source

pub fn get_mut(&mut self) -> &mut St

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.

source

pub fn get_pin_mut(self: Pin<&mut Self>) -> Pin<&mut St>

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.

source

pub fn into_inner(self) -> St

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.

source

pub fn peek(self: Pin<&mut Self>) -> Peek<'_, St>

Produces a future which retrieves a reference to the next item in the stream, or None if the underlying stream terminates.

source

pub fn poll_peek( self: Pin<&mut Self>, cx: &mut Context<'_> ) -> Poll<Option<&St::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.

source

pub fn peek_mut(self: Pin<&mut Self>) -> PeekMut<'_, St>

Produces a future which retrieves a mutable reference to the next item in the stream, or None if the underlying stream terminates.

Examples
use futures::stream::{self, StreamExt};
use futures::pin_mut;

let stream = stream::iter(vec![1, 2, 3]).peekable();
pin_mut!(stream);

assert_eq!(stream.as_mut().peek_mut().await, Some(&mut 1));
assert_eq!(stream.as_mut().next().await, Some(1));

// Peek into the stream and modify the value which will be returned next
if let Some(p) = stream.as_mut().peek_mut().await {
    if *p == 2 {
        *p = 5;
    }
}

assert_eq!(stream.collect::<Vec<_>>().await, vec![5, 3]);
source

pub fn poll_peek_mut( self: Pin<&mut Self>, cx: &mut Context<'_> ) -> Poll<Option<&mut St::Item>>

Peek retrieves a mutable reference to the next item in the stream.

source

pub fn next_if<F>(self: Pin<&mut Self>, func: F) -> NextIf<'_, St, F> where F: FnOnce(&St::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));
source

pub fn next_if_eq<'a, T>( self: Pin<&'a mut Self>, expected: &'a T ) -> NextIfEq<'a, St, T> where T: ?Sized, St::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§

source§

impl<St: Debug + Stream> Debug for Peekable<St>where St::Item: Debug,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<St: Stream> FusedStream for Peekable<St>

source§

fn is_terminated(&self) -> bool

Returns true if the stream should no longer be polled.
source§

impl<S: Stream> Stream for Peekable<S>

§

type Item = <S as Stream>::Item

Values yielded by the stream.
source§

fn poll_next( self: Pin<&mut Self>, cx: &mut Context<'_> ) -> Poll<Option<Self::Item>>

Attempt to pull out the next value of this stream, registering the current task for wakeup if the value is not yet available, and returning None if the stream is exhausted. Read more
source§

fn size_hint(&self) -> (usize, Option<usize>)

Returns the bounds on the remaining length of the stream. Read more
source§

impl<'__pin, St: Stream> Unpin for Peekable<St>where __Origin<'__pin, St>: Unpin,

Auto Trait Implementations§

§

impl<St> RefUnwindSafe for Peekable<St>where St: RefUnwindSafe, <St as Stream>::Item: RefUnwindSafe,

§

impl<St> Send for Peekable<St>where St: Send, <St as Stream>::Item: Send,

§

impl<St> Sync for Peekable<St>where St: Sync, <St as Stream>::Item: Sync,

§

impl<St> UnwindSafe for Peekable<St>where St: UnwindSafe, <St as Stream>::Item: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<S, T, E> TryStream for Swhere S: Stream<Item = Result<T, E>> + ?Sized,

§

type Ok = T

The type of successful values yielded by this future
§

type Error = E

The type of failures yielded by this future
source§

fn try_poll_next( self: Pin<&mut S>, cx: &mut Context<'_> ) -> Poll<Option<Result<<S as TryStream>::Ok, <S as TryStream>::Error>>>

Poll this TryStream as if it were a Stream. Read more