Skip to main content

InputBuffer

Struct InputBuffer 

Source
pub struct InputBuffer<T> { /* private fields */ }
Available on crate feature embedded_runtime only.
Expand description

An address-stable FIFO queue that backs a [futures::Stream] input parameter of a generated embedded function.

The queue is filled from application code via push and drained by the dataflow graph through an InputStream created with stream. The stream never terminates: while the queue is empty it returns Poll::Pending, and it is woken by the next push.

Implementations§

Source§

impl<T> InputBuffer<T>

Source

pub const fn new() -> Self

Creates an empty buffer. Does not allocate.

Source

pub fn push(&self, item: T)

Pushes an item onto the queue and wakes the InputStream if it is waiting.

Note that the item is only queued; it is processed the next time the flow runs.

Source

pub fn len(&self) -> usize

Returns the number of items currently queued.

Source

pub fn is_empty(&self) -> bool

Returns true if no items are currently queued.

Source

pub unsafe fn stream(self: Pin<&Self>) -> InputStream<T>

Creates a never-terminating [futures::Stream] that drains this buffer, for passing to a generated embedded function.

Multiple streams over one buffer are allowed (though rarely useful): items are delivered to whichever stream polls first, and only the most recent waker is woken.

§Safety

The buffer must outlive the returned stream. (The buffer cannot move while the stream exists, which is guaranteed by self being pinned, and the stream cannot be sent to another thread, as it is !Send.)

Trait Implementations§

Source§

impl<T> Debug for InputBuffer<T>

Source§

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

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

impl<T> Default for InputBuffer<T>

Source§

fn default() -> Self

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

Auto Trait Implementations§

§

impl<T> !Freeze for InputBuffer<T>

§

impl<T> !RefUnwindSafe for InputBuffer<T>

§

impl<T> !Send for InputBuffer<T>

§

impl<T> !Sync for InputBuffer<T>

§

impl<T> !Unpin for InputBuffer<T>

§

impl<T> !UnsafeUnpin for InputBuffer<T>

§

impl<T> UnwindSafe for InputBuffer<T>
where T: UnwindSafe,

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.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToSinkBuild for T

Source§

fn iter_to_sink_build(self) -> SendIterBuild<Self>
where Self: Sized + Iterator,

Starts a SinkBuild adaptor chain to send all items from self as an Iterator.
Source§

fn stream_to_sink_build(self) -> SendStreamBuild<Self>
where Self: Sized + Stream,

Starts a SinkBuild adaptor chain to send all items from self as a [Stream].
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<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more