Struct Producer

Source
pub struct Producer<T> { /* private fields */ }
Expand description

Fifo Production Handle

This is the “sending” half of a FIFO channel.

When you call the methods of this object to send N items, a reservation of N consecutive slots is performed on the underlying FIFO. Then, once this reservation is negociated, all items are pushed into the slots sequentially.

Unlike Consumers, Producers implement Clone.

§Example

let (tx, rx) = async_fifo::new();
 
// Sending items one by one
tx.send('a');
tx.send('b');
tx.send('c');
 
// Pouring items from a Vec
let mut vec = vec!['a', 'b', 'c'];
tx.send_iter(vec.drain(..));
 
// Sending an array of items
let array = ['a', 'b', 'c'];
tx.send_iter(array);
 
// Sending a slice of primitive items
let slice = ['a', 'b', 'c'].as_slice();
let iter = slice.iter().copied();
tx.send_iter(iter);
 
// Receiving a total of 12 items
let expected = ['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c'];
assert_eq!(rx.try_recv_array(), Some(expected));
assert_eq!(rx.try_recv(), None);

Implementations§

Source§

impl<T> Producer<T>

Source

pub fn send_iter<I>(&self, into_iter: I)
where I: IntoIterator, I::IntoIter: ExactSizeIterator<Item = T>,

Sends a batch of items in the channel, atomically.

This operation is non-blocking and always succeeds immediately.

Source

pub fn send(&self, item: T)

Sends one item through the channel.

This operation is non-blocking and always succeeds immediately.

Trait Implementations§

Source§

impl<T> Clone for Producer<T>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T> Drop for Producer<T>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl<T> Freeze for Producer<T>

§

impl<T> !RefUnwindSafe for Producer<T>

§

impl<T> Send for Producer<T>

§

impl<T> Sync for Producer<T>

§

impl<T> Unpin for Producer<T>

§

impl<T> !UnwindSafe for Producer<T>

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. 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.