Skip to main content

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}