use core::task::Waker;
use crate::{DiatomicWaker, WaitUntil};
#[derive(Debug)]
pub struct WakeSinkRef<'a> {
pub(crate) inner: &'a DiatomicWaker,
}
impl<'a> WakeSinkRef<'a> {
#[inline]
pub fn source_ref(&self) -> WakeSourceRef<'a> {
WakeSourceRef { inner: self.inner }
}
#[inline]
pub fn register(&mut self, waker: &Waker) {
unsafe { self.inner.register(waker) };
}
#[inline]
pub fn unregister(&mut self) {
unsafe { self.inner.unregister() };
}
#[inline]
pub fn wait_until<P, T>(&mut self, predicate: P) -> WaitUntil<'_, P, T>
where
P: FnMut() -> Option<T>,
{
unsafe { self.inner.wait_until(predicate) }
}
}
#[derive(Clone, Debug)]
pub struct WakeSourceRef<'a> {
pub(crate) inner: &'a DiatomicWaker,
}
impl WakeSourceRef<'_> {
#[inline]
pub fn notify(&self) {
self.inner.notify();
}
}