ValueStream

Struct ValueStream 

pub struct ValueStream { /* private fields */ }
Expand description

An async stream of Values with optional type checking.

ValueStream combines a buffered front-end with an optional async [Stream] back-end. Values can be pushed into the buffer or pulled from the underlying stream. When a Type is attached via typed, every yielded value is checked at runtime.

Implements [Stream] from tokio_stream, yielding Result<Value> items.

§Examples

use toasty_core::stmt::{Value, ValueStream};

let mut stream = ValueStream::from_value(Value::from(42_i64));
let val = stream.next().await.unwrap().unwrap();
assert_eq!(val, Value::from(42_i64));

Implementations§

§

impl ValueStream

pub fn from_value(value: impl Into<Value>) -> ValueStream

Creates a stream containing a single value.

pub fn from_stream<T>(stream: T) -> ValueStream
where T: Stream<Item = Result<Value, Error>> + Send + 'static,

Creates a stream backed by an async [Stream] of Result<Value>.

pub fn from_vec(records: Vec<Value>) -> ValueStream

Creates a fully-buffered stream from a vector of values.

pub fn from_iter<T, I>(iter: I) -> ValueStream
where T: Into<Value>, I: Iterator<Item = Result<T, Error>> + Send + 'static,

Creates a stream from a fallible iterator.

pub async fn next(&mut self) -> Option<Result<Value, Error>>

Returns the next record in the stream

pub async fn peek(&mut self) -> Option<Result<&Value, Error>>

Peek at the next record in the stream

pub async fn tap(&mut self) -> Result<(), Error>

Force the stream to preload at least one record, if there are more records to stream.

pub fn min_len(&self) -> usize

Returns the minimum number of elements this stream will yield.

This is derived from the stream’s size_hint lower bound plus the number of buffered elements.

pub async fn collect(self) -> Result<Vec<Value>, Error>

Consumes the stream and collects all values into a Vec.

pub async fn dup(&mut self) -> Result<ValueStream, Error>

Fully buffers the stream and returns a clone of it.

After this call, both the original and the returned stream are fully buffered and contain the same values.

pub fn try_clone(&self) -> Option<ValueStream>

Returns a clone if the stream is fully buffered, or None if there is an unconsumed async stream that cannot be cloned.

pub async fn buffer(&mut self) -> Result<(), Error>

Drains the underlying async stream into the buffer.

After this call, all remaining values are buffered locally and is_buffered returns true.

pub fn is_buffered(&self) -> bool

Returns true if the ValueStream is fully buffered (no remaining stream)

pub fn buffered_to_vec(&self) -> Vec<Value>

Returns a clone of only the currently buffered values Does not consume any stream data or wait for additional values

pub fn iter_mut(&mut self) -> impl Iterator<Item = &mut Value>

Returns a mutable iterator over the buffered values.

§Panics

Panics if the stream has an unconsumed async back-end. Call buffer first to ensure all values are buffered.

pub fn typed(self, ty: Type) -> ValueStream

Attaches a Type constraint to this stream.

Every value yielded from the stream (both already-buffered and future) will be checked against ty at runtime. If a value does not match, the check panics with a diagnostic message.

§Panics

Panics if an already-buffered value is not compatible with ty, or if a previously set type differs from ty.

Trait Implementations§

§

impl Debug for ValueStream

§

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

Formats the value using the given formatter. Read more
§

impl Default for ValueStream

§

fn default() -> ValueStream

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

impl From<Value> for ValueStream

§

fn from(src: Value) -> ValueStream

Converts to this type from the input type.
§

impl From<Vec<Value>> for ValueStream

§

fn from(value: Vec<Value>) -> ValueStream

Converts to this type from the input type.
§

impl Stream for ValueStream

§

type Item = Result<Value, Error>

Values yielded by the stream.
§

fn poll_next( self: Pin<&mut ValueStream>, cx: &mut Context<'_>, ) -> Poll<Option<<ValueStream as Stream>::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
§

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

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

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.

§

impl<St> StreamExt for St
where St: Stream + ?Sized,

§

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

Consumes and returns the next value in the stream or None if the stream is finished. Read more
§

fn try_next<T, E>(&mut self) -> TryNext<'_, Self>
where Self: Stream<Item = Result<T, E>> + Unpin,

Consumes and returns the next item in the stream. If an error is encountered before the next item, the error is returned instead. Read more
§

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
§

fn map_while<T, F>(self, f: F) -> MapWhile<Self, F>
where F: FnMut(Self::Item) -> Option<T>, Self: Sized,

Map this stream’s items to a different type for as long as determined by the provided closure. A stream of the target type will be returned, which will yield elements until the closure returns None. Read more
§

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

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

fn merge<U>(self, other: U) -> Merge<Self, U>
where U: Stream<Item = Self::Item>, Self: Sized,

Combine two streams into one by interleaving the output of both as it is produced. Read more
§

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

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

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

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

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

Creates a stream which ends after the first None. Read more
§

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
§

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

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

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

Creates a new stream that will skip the n first items of the underlying stream. Read more
§

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

Skip elements from the underlying stream while the provided predicate resolves to true. Read more
§

fn all<F>(&mut self, f: F) -> AllFuture<'_, Self, F>
where Self: Unpin, F: FnMut(Self::Item) -> bool,

Tests if every element of the stream matches a predicate. Read more
§

fn any<F>(&mut self, f: F) -> AnyFuture<'_, Self, F>
where Self: Unpin, F: FnMut(Self::Item) -> bool,

Tests if any element of the stream matches a predicate. Read more
§

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

Combine two streams into one by first returning all values from the first stream then all values from the second stream. Read more
§

fn fold<B, F>(self, init: B, f: F) -> FoldFuture<Self, B, F>
where Self: Sized, F: FnMut(B, Self::Item) -> B,

A combinator that applies a function to every element in a stream producing a single, final value. Read more
§

fn collect<T>( self, ) -> Collect<Self, T, <T as FromStreamPriv<Self::Item>>::InternalCollection>
where T: FromStream<Self::Item>, Self: Sized,

Drain stream pushing all emitted values into a collection. Read more
§

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

Turns the stream into a peekable stream, whose next element can be peeked at without being consumed. 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.
§

impl<S, T, E> TryStream for S
where 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
§

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