nimiq_utils/waker.rs
1use std::task::{Context, Waker};
2
3pub trait WakerExt {
4 fn store_waker(&mut self, context: &Context);
5 fn wake(&mut self);
6}
7
8impl WakerExt for Option<Waker> {
9 fn store_waker(&mut self, context: &Context) {
10 let waker = context.waker();
11 match self {
12 Some(stored) => stored.clone_from(waker),
13 None => *self = Some(waker.clone()),
14 }
15 }
16 fn wake(&mut self) {
17 if let Some(waker) = self.take() {
18 waker.wake();
19 }
20 }
21}