use core::mem;
use core::task::Waker;
#[derive(Debug, Default)]
pub struct WakerRegistration {
waker: Option<Waker>,
}
impl WakerRegistration {
pub const fn new() -> Self {
Self { waker: None }
}
pub fn register(&mut self, w: &Waker) {
match self.waker {
Some(ref w2) if (w2.will_wake(w)) => {}
_ => {
if let Some(old_waker) = mem::replace(&mut self.waker, Some(w.clone())) {
old_waker.wake()
}
}
}
}
pub fn wake(&mut self) {
if let Some(w) = self.waker.take() {
w.wake()
}
}
pub fn occupied(&self) -> bool {
self.waker.is_some()
}
}