Struct StreamUnordered

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

A set of streams which may yield items in any order.

This structure is optimized to manage a large number of streams. Streams managed by StreamUnordered will only be polled when they generate wake-up notifications. This reduces the required amount of work needed to poll large numbers of streams.

StreamUnordered can be filled by collecting an iterator of streams into a StreamUnordered, or by inserting streams onto an existing StreamUnordered. When new streams are added, poll_next must be called in order to begin receiving wake-ups for new streams.

Note that you can create a ready-made StreamUnordered via the collect method, or you can start with an empty set with the StreamUnordered::new constructor.

Implementations§

Source§

impl<S: Stream> StreamUnordered<S>

Source

pub fn new() -> StreamUnordered<S>

Constructs a new, empty StreamUnordered.

The returned StreamUnordered does not contain any streams. In this state, StreamUnordered::poll_next will return Poll::Ready(None).

Source§

impl<S> StreamUnordered<S>

Source

pub fn len(&self) -> usize

Returns the number of streams contained in the set.

This represents the total number of in-flight streams.

Source

pub fn is_empty(&self) -> bool

Returns true if the set contains no streams.

Source

pub fn stream_entry(&mut self) -> StreamEntry<'_, S>

Returns a handle to a vacant stream entry allowing for further manipulation.

This function is useful when creating values that must contain their stream token. The returned StreamEntry reserves an entry for the stream and is able to query the associated token.

Source

pub fn push(&mut self, stream: S) -> usize

👎Deprecated since 0.5.2: Prefer StreamUnordered::insert

Insert a stream into the set.

A deprecated synonym for [insert].

Source

pub fn insert(&mut self, stream: S) -> usize

Insert a stream into the set.

This method adds the given stream to the set. This method will not call poll_next on the submitted stream. The caller must ensure that StreamUnordered::poll_next is called in order to receive wake-up notifications for the given stream.

The returned token is an identifier that uniquely identifies the given stream in the current set. To get a handle to the inserted stream, pass the token to StreamUnordered::get, StreamUnordered::get_mut, or StreamUnordered::get_pin_mut (or just index StreamUnordered directly). The same token will be yielded whenever an element is pulled from this stream.

Note that the streams are not ordered, and may not be yielded back in insertion or token order when you iterate over them.

Source

pub fn remove(self: Pin<&mut Self>, token: usize) -> bool

Remove a stream from the set.

The stream will be dropped and will no longer yield stream events.

Source

pub fn take(self: Pin<&mut Self>, token: usize) -> Option<S>
where S: Unpin,

Remove and return a stream from the set.

The stream will no longer be polled, and will no longer yield stream events.

Note that since this method moves S, which we may have given out a Pin to, it requires that S is Unpin.

Source

pub fn is_finished(&self, token: usize) -> Option<bool>

Returns true if the stream with the given token has yielded None.

Source

pub fn get(&self, token: usize) -> Option<&S>

Returns a reference to the stream with the given token

Source

pub fn get_mut(&mut self, token: usize) -> Option<&mut S>
where S: Unpin,

Returns a reference that allows modifying the stream with the given token.

Source

pub fn get_pin_mut(self: Pin<&mut Self>, token: usize) -> Option<Pin<&mut S>>

Returns a pinned reference that allows modifying the stream with the given token.

Source

pub fn iter_mut(&mut self) -> IterMut<'_, S>
where S: Unpin,

Returns an iterator that allows modifying each stream in the set.

Source

pub fn iter_mut_with_token(&mut self) -> IterMutWithToken<'_, S>
where S: Unpin,

Returns an iterator that allows modifying each stream in the set.

Source

pub fn iter_pin_mut(self: Pin<&mut Self>) -> IterPinMut<'_, S>

Returns an iterator that allows modifying each stream in the set.

Source

pub fn iter_pin_mut_with_token( self: Pin<&mut Self>, ) -> IterPinMutWithToken<'_, S>

Returns an iterator that allows modifying each stream in the set.

Source

pub fn iter_with_token(&self) -> IterWithToken<'_, S>

Returns an immutable iterator that allows getting a reference to each stream in the set.

Trait Implementations§

Source§

impl<S> Debug for StreamUnordered<S>

Source§

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

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

impl<S: Stream> Default for StreamUnordered<S>

Source§

fn default() -> StreamUnordered<S>

Returns the “default value” for a type. Read more
Source§

impl<S> Drop for StreamUnordered<S>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl<S: Stream> FromIterator<S> for StreamUnordered<S>

Source§

fn from_iter<I>(iter: I) -> Self
where I: IntoIterator<Item = S>,

Creates a value from an iterator. Read more
Source§

impl<S: Stream + 'static> FusedStream for StreamUnordered<S>

Source§

fn is_terminated(&self) -> bool

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

impl<S> Index<usize> for StreamUnordered<S>

Source§

type Output = S

The returned type after indexing.
Source§

fn index(&self, stream: usize) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
Source§

impl<S> IndexMut<usize> for StreamUnordered<S>
where S: Unpin,

Source§

fn index_mut(&mut self, stream: usize) -> &mut Self::Output

Performs the mutable indexing (container[index]) operation. Read more
Source§

impl<S: Stream + 'static> Stream for StreamUnordered<S>

Source§

type Item = (StreamYield<S>, usize)

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<S: Send> Send for StreamUnordered<S>

Source§

impl<S: Sync> Sync for StreamUnordered<S>

Source§

impl<S> Unpin for StreamUnordered<S>

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

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> StreamExt for T
where T: Stream + ?Sized,

Source§

fn next(&mut self) -> Next<'_, Self>
where Self: Unpin,

Creates a future that resolves to the next item in the stream. Read more
Source§

fn into_future(self) -> StreamFuture<Self>
where Self: Sized + Unpin,

Converts this stream into a future of (next_item, tail_of_stream). If the stream terminates, then the next item is None. Read more
Source§

fn map<T, F>(self, f: F) -> Map<Self, F>
where F: FnMut(Self::Item) -> T, Self: Sized,

Maps this stream’s items to a different type, returning a new stream of the resulting type. Read more
Source§

fn enumerate(self) -> Enumerate<Self>
where Self: Sized,

Creates a stream which gives the current iteration count as well as the next value. Read more
Source§

fn filter<Fut, F>(self, f: F) -> Filter<Self, Fut, F>
where F: FnMut(&Self::Item) -> Fut, Fut: Future<Output = bool>, Self: Sized,

Filters the values produced by this stream according to the provided asynchronous predicate. Read more
Source§

fn filter_map<Fut, T, F>(self, f: F) -> FilterMap<Self, Fut, F>
where F: FnMut(Self::Item) -> Fut, Fut: Future<Output = Option<T>>, Self: Sized,

Filters the values produced by this stream while simultaneously mapping them to a different type according to the provided asynchronous closure. Read more
Source§

fn then<Fut, F>(self, f: F) -> Then<Self, Fut, F>
where F: FnMut(Self::Item) -> Fut, Fut: Future, Self: Sized,

Computes from this stream’s items new items of a different type using an asynchronous closure. Read more
Source§

fn collect<C>(self) -> Collect<Self, C>
where C: Default + Extend<Self::Item>, Self: Sized,

Transforms a stream into a collection, returning a future representing the result of that computation. Read more
Source§

fn unzip<A, B, FromA, FromB>(self) -> Unzip<Self, FromA, FromB>
where FromA: Default + Extend<A>, FromB: Default + Extend<B>, Self: Sized + Stream<Item = (A, B)>,

Converts a stream of pairs into a future, which resolves to pair of containers. Read more
Source§

fn concat(self) -> Concat<Self>
where Self: Sized, Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,

Concatenate all items of a stream into a single extendable destination, returning a future representing the end result. Read more
Source§

fn count(self) -> Count<Self>
where Self: Sized,

Drives the stream to completion, counting the number of items. Read more
Source§

fn cycle(self) -> Cycle<Self>
where Self: Sized + Clone,

Repeats a stream endlessly. Read more
Source§

fn fold<T, Fut, F>(self, init: T, f: F) -> Fold<Self, Fut, T, F>
where F: FnMut(T, Self::Item) -> Fut, Fut: Future<Output = T>, Self: Sized,

Execute an accumulating asynchronous computation over a stream, collecting all the values into one final result. Read more
Source§

fn any<Fut, F>(self, f: F) -> Any<Self, Fut, F>
where F: FnMut(Self::Item) -> Fut, Fut: Future<Output = bool>, Self: Sized,

Execute predicate over asynchronous stream, and return true if any element in stream satisfied a predicate. Read more
Source§

fn all<Fut, F>(self, f: F) -> All<Self, Fut, F>
where F: FnMut(Self::Item) -> Fut, Fut: Future<Output = bool>, Self: Sized,

Execute predicate over asynchronous stream, and return true if all element in stream satisfied a predicate. Read more
Source§

fn flatten(self) -> Flatten<Self>
where Self::Item: Stream, Self: Sized,

Flattens a stream of streams into just one continuous stream. Read more
Source§

fn flatten_unordered( self, limit: impl Into<Option<usize>>, ) -> FlattenUnorderedWithFlowController<Self, ()>
where Self::Item: Stream + Unpin, Self: Sized,

Flattens a stream of streams into just one continuous stream. Polls inner streams produced by the base stream concurrently. Read more
Source§

fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
where F: FnMut(Self::Item) -> U, U: Stream, Self: Sized,

Maps a stream like StreamExt::map but flattens nested Streams. Read more
Source§

fn flat_map_unordered<U, F>( self, limit: impl Into<Option<usize>>, f: F, ) -> FlatMapUnordered<Self, U, F>
where U: Stream + Unpin, F: FnMut(Self::Item) -> U, Self: Sized,

Maps a stream like StreamExt::map but flattens nested Streams and polls them concurrently, yielding items in any order, as they made available. Read more
Source§

fn scan<S, B, Fut, F>(self, initial_state: S, f: F) -> Scan<Self, S, Fut, F>
where F: FnMut(&mut S, Self::Item) -> Fut, Fut: Future<Output = Option<B>>, Self: Sized,

Combinator similar to StreamExt::fold that holds internal state and produces a new stream. Read more
Source§

fn skip_while<Fut, F>(self, f: F) -> SkipWhile<Self, Fut, F>
where F: FnMut(&Self::Item) -> Fut, Fut: Future<Output = bool>, Self: Sized,

Skip elements on this stream while the provided asynchronous predicate resolves to true. Read more
Source§

fn take_while<Fut, F>(self, f: F) -> TakeWhile<Self, Fut, F>
where F: FnMut(&Self::Item) -> Fut, Fut: Future<Output = bool>, Self: Sized,

Take elements from this stream while the provided asynchronous predicate resolves to true. Read more
Source§

fn take_until<Fut>(self, fut: Fut) -> TakeUntil<Self, Fut>
where Fut: Future, Self: Sized,

Take elements from this stream until the provided future resolves. Read more
Source§

fn for_each<Fut, F>(self, f: F) -> ForEach<Self, Fut, F>
where F: FnMut(Self::Item) -> Fut, Fut: Future<Output = ()>, Self: Sized,

Runs this stream to completion, executing the provided asynchronous closure for each element on the stream. Read more
Source§

fn for_each_concurrent<Fut, F>( self, limit: impl Into<Option<usize>>, f: F, ) -> ForEachConcurrent<Self, Fut, F>
where F: FnMut(Self::Item) -> Fut, Fut: Future<Output = ()>, Self: Sized,

Runs this stream to completion, executing the provided asynchronous closure for each element on the stream concurrently as elements become available. Read more
Source§

fn take(self, n: usize) -> Take<Self>
where Self: Sized,

Creates a new stream of at most n items of the underlying stream. Read more
Source§

fn skip(self, n: usize) -> Skip<Self>
where Self: Sized,

Creates a new stream which skips n items of the underlying stream. Read more
Source§

fn fuse(self) -> Fuse<Self>
where Self: Sized,

Fuse a stream such that poll_next will never again be called once it has finished. This method can be used to turn any Stream into a FusedStream. Read more
Source§

fn by_ref(&mut self) -> &mut Self

Borrows a stream, rather than consuming it. Read more
Source§

fn catch_unwind(self) -> CatchUnwind<Self>
where Self: Sized + UnwindSafe,

Catches unwinding panics while polling the stream. Read more
Source§

fn boxed<'a>(self) -> Pin<Box<dyn Stream<Item = Self::Item> + Send + 'a>>
where Self: Sized + Send + 'a,

Wrap the stream in a Box, pinning it. Read more
Source§

fn boxed_local<'a>(self) -> Pin<Box<dyn Stream<Item = Self::Item> + 'a>>
where Self: Sized + 'a,

Wrap the stream in a Box, pinning it. Read more
Source§

fn buffered(self, n: usize) -> Buffered<Self>
where Self::Item: Future, Self: Sized,

An adaptor for creating a buffered list of pending futures. Read more
Source§

fn buffer_unordered(self, n: usize) -> BufferUnordered<Self>
where Self::Item: Future, Self: Sized,

An adaptor for creating a buffered list of pending futures (unordered). Read more
Source§

fn zip<St>(self, other: St) -> Zip<Self, St>
where St: Stream, Self: Sized,

An adapter for zipping two streams together. Read more
Source§

fn chain<St>(self, other: St) -> Chain<Self, St>
where St: Stream<Item = Self::Item>, Self: Sized,

Adapter for chaining two streams. Read more
Source§

fn peekable(self) -> Peekable<Self>
where Self: Sized,

Creates a new stream which exposes a peek method. Read more
Source§

fn chunks(self, capacity: usize) -> Chunks<Self>
where Self: Sized,

An adaptor for chunking up items of the stream inside a vector. Read more
Source§

fn ready_chunks(self, capacity: usize) -> ReadyChunks<Self>
where Self: Sized,

An adaptor for chunking up ready items of the stream inside a vector. Read more
Source§

fn forward<S>(self, sink: S) -> Forward<Self, S>
where S: Sink<Self::Ok, Error = Self::Error>, Self: Sized + TryStream,

A future that completes after the given stream has been fully processed into the sink and the sink has been flushed and closed. Read more
Source§

fn split<Item>(self) -> (SplitSink<Self, Item>, SplitStream<Self>)
where Self: Sized + Sink<Item>,

Splits this Stream + Sink object into separate Sink and Stream objects. Read more
Source§

fn inspect<F>(self, f: F) -> Inspect<Self, F>
where F: FnMut(&Self::Item), Self: Sized,

Do something with each item of this stream, afterwards passing it on. Read more
Source§

fn left_stream<B>(self) -> Either<Self, B>
where B: Stream<Item = Self::Item>, Self: Sized,

Wrap this stream in an Either stream, making it the left-hand variant of that Either. Read more
Source§

fn right_stream<B>(self) -> Either<B, Self>
where B: Stream<Item = Self::Item>, Self: Sized,

Wrap this stream in an Either stream, making it the right-hand variant of that Either. Read more
Source§

fn poll_next_unpin(&mut self, cx: &mut Context<'_>) -> Poll<Option<Self::Item>>
where Self: Unpin,

A convenience method for calling Stream::poll_next on Unpin stream types.
Source§

fn select_next_some(&mut self) -> SelectNextSome<'_, Self>
where Self: Unpin + FusedStream,

Returns a Future that resolves when the next item in this stream is ready. Read more
Source§

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

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.
Source§

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

Source§

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

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.