Struct embassy_sync::channel::Channel

source ·
pub struct Channel<M, T, const N: usize>
where M: RawMutex,
{ /* private fields */ }
Expand description

A bounded channel for communicating between asynchronous tasks with backpressure.

The channel will buffer up to the provided number of messages. Once the buffer is full, attempts to send new messages will wait until a message is received from the channel.

All data sent will become available in the same order as it was sent.

Implementations§

source§

impl<M, T, const N: usize> Channel<M, T, N>
where M: RawMutex,

source

pub const fn new() -> Self

Establish a new bounded channel. For example, to create one with a NoopMutex:

use embassy_sync::channel::Channel;
use embassy_sync::blocking_mutex::raw::NoopRawMutex;

// Declare a bounded channel of 3 u32s.
let mut channel = Channel::<NoopRawMutex, u32, 3>::new();
source

pub fn poll_receive(&self, cx: &mut Context<'_>) -> Poll<T>

Poll the channel for the next message

source

pub fn poll_ready_to_receive(&self, cx: &mut Context<'_>) -> Poll<()>

Allows a poll_fn to poll until the channel is ready to receive

source

pub fn poll_ready_to_send(&self, cx: &mut Context<'_>) -> Poll<()>

Allows a poll_fn to poll until the channel is ready to send

source

pub fn sender(&self) -> Sender<'_, M, T, N>

Get a sender for this channel.

source

pub fn receiver(&self) -> Receiver<'_, M, T, N>

Get a receiver for this channel.

source

pub fn send(&self, message: T) -> SendFuture<'_, M, T, N>

Send a value, waiting until there is capacity.

Sending completes when the value has been pushed to the channel’s queue. This doesn’t mean the value has been received yet.

source

pub fn try_send(&self, message: T) -> Result<(), TrySendError<T>>

Attempt to immediately send a message.

This method differs from send by returning immediately if the channel’s buffer is full, instead of waiting.

§Errors

If the channel capacity has been reached, i.e., the channel has n buffered values where n is the argument passed to Channel, then an error is returned.

source

pub fn receive(&self) -> ReceiveFuture<'_, M, T, N>

Receive the next value.

If there are no messages in the channel’s buffer, this method will wait until a message is sent.

source

pub fn try_receive(&self) -> Result<T, TryReceiveError>

Attempt to immediately receive a message.

This method will either receive a message from the channel immediately or return an error if the channel is empty.

Auto Trait Implementations§

§

impl<M, T, const N: usize> !Freeze for Channel<M, T, N>

§

impl<M, T, const N: usize> !RefUnwindSafe for Channel<M, T, N>

§

impl<M, T, const N: usize> Send for Channel<M, T, N>
where M: Send, T: Send,

§

impl<M, T, const N: usize> Sync for Channel<M, T, N>
where M: Sync, T: Send,

§

impl<M, T, const N: usize> Unpin for Channel<M, T, N>
where M: Unpin, T: Unpin,

§

impl<M, T, const N: usize> UnwindSafe for Channel<M, T, N>
where M: UnwindSafe, 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.

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, U> TryFrom<U> for T
where U: Into<T>,

§

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>,

§

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.