Skip to main content

JoinEventRx

Struct JoinEventRx 

Source
pub struct JoinEventRx { /* private fields */ }
Expand description

Type-erased receiver for join trigger events.

Obtained as the first argument to the JoinBuilder::on_triggers closure. Call .recv().await in a loop to consume trigger events from all input forwarders. Returns Err when all input forwarders have exited and the channel is closed.

.on_triggers(|mut rx, producer| async move {
    let mut last_a: Option<f32> = None;
    let mut last_b: Option<f32> = None;
    while let Ok(trigger) = rx.recv().await {
        match trigger.index() {
            0 => last_a = trigger.as_input::<InputA>().copied(),
            1 => last_b = trigger.as_input::<InputB>().copied(),
            _ => {}
        }
        if let (Some(a), Some(b)) = (last_a, last_b) {
            producer.produce(compute(a, b)).await.ok();
        }
    }
})

Implementations§

Source§

impl JoinEventRx

Source

pub async fn recv(&mut self) -> ExecutorResult<JoinTrigger>

Receive the next trigger event.

Returns Ok(JoinTrigger) when an input fires, or Err when all inputs are closed.

§Runtime portability

On Tokio and WASM, the channel closes once every input forwarder has dropped its sender, and recv returns Err, ending any while let Ok(_) = rx.recv().await loop.

On Embassy the channel never closes — this branch is unreachable and the loop runs for the device lifetime. Portable handlers should not rely on the loop exiting to release resources.

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, 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.
Source§

impl<R> RuntimeForProfiling for R