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
impl JoinEventRx
Sourcepub async fn recv(&mut self) -> ExecutorResult<JoinTrigger>
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§
impl Freeze for JoinEventRx
impl !RefUnwindSafe for JoinEventRx
impl Send for JoinEventRx
impl !Sync for JoinEventRx
impl Unpin for JoinEventRx
impl UnsafeUnpin for JoinEventRx
impl !UnwindSafe for JoinEventRx
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more