use std::task::Waker;
#[derive(Default)]
pub struct WakerSlot(Option<Waker>);
impl WakerSlot {
pub fn register(&mut self, waker: &Waker) {
match self.0.as_mut() {
Some(prev) if prev.will_wake(waker) => {},
Some(prev) => prev.clone_from(waker),
None => self.0 = Some(waker.clone()),
}
}
pub fn wake(&mut self) {
if let Some(waker) = self.0.take() {
waker.wake();
}
}
}