use embassy_sync::blocking_mutex::raw::RawMutex;
use crate::utils::init::{init, Init};
use super::blocking::raw::MatterRawMutex;
use super::signal::Signal;
pub struct Notification<M = MatterRawMutex> {
signal: Signal<Option<()>, M>,
}
impl<M> Default for Notification<M>
where
M: RawMutex,
{
fn default() -> Self {
Self::new()
}
}
impl<M> Notification<M>
where
M: RawMutex,
{
pub const fn new() -> Self {
Self {
signal: Signal::new(None),
}
}
pub fn init() -> impl Init<Self> {
init!(Self {
signal <- Signal::init(None),
})
}
pub fn notify(&self) {
self.signal.signal(());
}
pub async fn wait(&self) {
self.signal.wait_signalled().await;
}
}