async_ach_waker/
entity.rs1use ach_option::AchOption;
2use core::ops::Deref;
3use core::task::Waker;
4
5pub struct WakerEntity<T> {
6 waker: AchOption<Waker>,
7 val: T,
8}
9impl<T> WakerEntity<T> {
10 pub fn new(waker: Waker, val: T) -> WakerEntity<T> {
11 let waker = AchOption::new_with(waker);
12 WakerEntity { waker, val }
13 }
14 pub fn set_waker(&self, waker: Waker) {
15 self.waker.replace(waker);
16 }
17 pub fn wake(&self) -> bool {
19 if let Some(waker) = self.waker.take() {
20 waker.wake();
21 true
22 } else {
23 false
24 }
25 }
26 pub fn is_waked(&self) -> bool {
27 self.waker.is_none()
28 }
29}
30impl<T> Deref for WakerEntity<T> {
31 type Target = T;
32 fn deref(&self) -> &Self::Target {
33 &self.val
34 }
35}