mod input; pub use input::*; use embassy_sync::blocking_mutex::raw::RawMutex; use embassy_sync::pubsub; use embassy_sync::pubsub::{PubSubBehavior, PubSubChannel, Subscriber}; pub trait Publish { type Value: Copy; type Mutex: RawMutex; fn subscribe( &self, ) -> Result, pubsub::Error>; } pub struct Publisher { channel: PubSubChannel, } impl Publisher { #[inline(always)] pub fn new(channel: PubSubChannel) -> Self { Self { channel } } #[inline(always)] pub fn update(&self, value: T) { self.channel.publish_immediate(value); } } impl Publish for Publisher { type Value = T; type Mutex = MutexT; #[inline(always)] fn subscribe( &self, ) -> Result, pubsub::Error> { self.channel.subscriber() } } impl From> for Publisher { #[inline(always)] fn from(channel: PubSubChannel) -> Self { Publisher::new(channel) } }