pub struct StreamNotifyClose<S> { /* private fields */ }
Expand description

A Stream that wraps the values in an Option.

Whenever the wrapped stream yields an item, this stream yields that item wrapped in Some. When the inner stream ends, then this stream first yields a None item, and then this stream will also end.

Example

Using StreamNotifyClose to handle closed streams with StreamMap.

use tokio_stream::{StreamExt, StreamMap, StreamNotifyClose};

#[tokio::main]
async fn main() {
    let mut map = StreamMap::new();
    let stream = StreamNotifyClose::new(tokio_stream::iter(vec![0, 1]));
    let stream2 = StreamNotifyClose::new(tokio_stream::iter(vec![0, 1]));
    map.insert(0, stream);
    map.insert(1, stream2);
    while let Some((key, val)) = map.next().await {
        match val {
            Some(val) => println!("got {val:?} from stream {key:?}"),
            None => println!("stream {key:?} closed"),
        }
    }
}

Implementations§

source§

impl<S> StreamNotifyClose<S>

source

pub fn new(stream: S) -> Self

Create a new StreamNotifyClose.

source

pub fn into_inner(self) -> Option<S>

Get back the inner Stream.

Returns None if the stream has reached its end.

Trait Implementations§

source§

impl<S> Stream for StreamNotifyClose<S>where S: Stream,

§

type Item = Option<<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, S> Unpin for StreamNotifyClose<S>where __Origin<'__pin, S>: Unpin,

Auto Trait Implementations§

§

impl<S> RefUnwindSafe for StreamNotifyClose<S>where S: RefUnwindSafe,

§

impl<S> Send for StreamNotifyClose<S>where S: Send,

§

impl<S> Sync for StreamNotifyClose<S>where S: Sync,

§

impl<S> UnwindSafe for StreamNotifyClose<S>where S: 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.