# futures_util::stream::Peekable - Rust
API documentation for the Rust `Peekable` struct in crate `futures_util`.
Keywords: rust, rustlang, rust-lang, Peekable

# Struct futures_util::stream::Peekable [−] [src]

    #[must_use = "streams do nothing unless polled"]pub struct Peekable<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: Stream> Peekable<St>` [src]

#### `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 Self>) -> 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 Self>) -> Peek<'_, St>ⓘ

### Notable traits for Peek<'a, St>

`impl<'a, St> Future for Peek<'a, St> where
St: Stream, type Output = Option<&'a St::Item>;`
` [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 Self>,
cx: &mut Context<'_>
) -> Poll<Option<&St::Item>>` [src]

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 Self>, func: F) -> NextIf<'_, St, F>ⓘ

### Notable traits for NextIf<'_, St, F>

`impl<St, F> Future for NextIf<'_, St, F> where
St: Stream,
F: for<'a> FnOnce1<&'a St::Item, Output = bool>, type Output = Option<St::Item>;`
where
F: FnOnce(&St::Item) -> bool,` [src]

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<'a, T>(
self: Pin<&'a mut Self>,
expected: &'a T
) -> NextIfEq<'a, St, T>ⓘ

### Notable traits for NextIfEq<'_, St, T>

`impl<St, T> Future for NextIfEq<'_, St, T> where
St: Stream,
T: ?Sized,
St::Item: PartialEq<T>, type Output = Option<St::Item>;`
where
T: ?Sized,
St::Item: PartialEq<T>,` [src]

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 + Stream> Debug for Peekable<St> where
St::Item: Debug,` [src]

#### `fn fmt(&self, f: &mut Formatter<'_>) -> Result` [src]

Formats the value using the given formatter. Read more

### `impl<St: Stream> FusedStream for Peekable<St>` [src]

#### `fn is_terminated(&self) -> bool` [src]

Returns `true` if the stream should no longer be polled.

### `impl<S: Stream> Stream for Peekable<S>` [src]

#### `type Item = S::Item`

Values yielded by the stream.

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

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

#### `fn size_hint(&self) -> (usize, Option<usize>)` [src]

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

### `impl<'__pin, St: Stream> Unpin for Peekable<St> where
__Origin<'__pin, St>: Unpin,` [src]

## Auto Trait Implementations

### `impl<St> RefUnwindSafe for Peekable<St> where
St: RefUnwindSafe,
<St as Stream>::Item: RefUnwindSafe,` [src]

### `impl<St> Send for Peekable<St> where
St: Send,
<St as Stream>::Item: Send,` [src]

### `impl<St> Sync for Peekable<St> where
St: Sync,
<St as Stream>::Item: Sync,` [src]

### `impl<St> UnwindSafe for Peekable<St> where
St: UnwindSafe,
<St as Stream>::Item: UnwindSafe,` [src]

## Blanket Implementations

### `impl<T> Any for T where
T: 'static + ?Sized,` [src]

#### `pub fn type_id(&self) -> TypeId` [src]

Gets the `TypeId` of `self`. Read more

### `impl<T> Borrow<T> for T where
T: ?Sized,` [src]

#### `pub fn borrow(&self) -> &T` [src]

Immutably borrows from an owned value. Read more

### `impl<T> BorrowMut<T> for T where
T: ?Sized,` [src]

#### `pub fn borrow_mut(&mut self) -> &mut T` [src]

Mutably borrows from an owned value. Read more

### `impl<T> From<T> for T` [src]

#### `pub fn from(t: T) -> T` [src]

Performs the conversion.

### `impl<T, U> Into<U> for T where
U: From<T>,` [src]

#### `pub fn into(self) -> U` [src]

Performs the conversion.

### `impl<T, U> TryFrom<U> for T where
U: Into<T>,` [src]

#### `type Error = Infallible`

The type returned in the event of a conversion error.

#### `pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>` [src]

Performs the conversion.

### `impl<T, U> TryInto<U> for T where
U: TryFrom<T>,` [src]

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

The type returned in the event of a conversion error.

#### `pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>` [src]

Performs the conversion.

### `impl<S, T, E> TryStream for S where
S: Stream<Item = Result<T, E>> + ?Sized,` [src]

#### `type Ok = T`

The type of successful values yielded by this future

#### `type Error = E`

The type of failures yielded by this future

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

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