dope_core/driver/schedule/ready/wake/
waker.rs1use std::mem;
2
3use ready::task;
4
5use crate::driver::schedule::ready;
6
7#[repr(transparent)]
11#[derive(PartialEq, Eq)]
12pub struct Waker<'d>(pub(super) ready::Address<'d>);
13
14impl<'d> Waker<'d> {
15 pub const fn key(&self) -> &ready::Retained<'d> {
16 &self.0.key
17 }
18
19 pub fn wake(self) {
20 self.0.wake();
21 }
22}
23
24impl<'d> From<ready::Target<'d>> for Waker<'d> {
25 fn from(target: ready::Target<'d>) -> Self {
26 Self(target.address())
27 }
28}
29
30impl<'d> From<task::Parent<'d>> for Waker<'d> {
31 fn from(parent: task::Parent<'d>) -> Self {
32 Self(parent.address())
33 }
34}
35
36const _: () = {
37 assert!(mem::size_of::<Waker<'static>>() == 2 * mem::size_of::<usize>());
38 assert!(mem::size_of::<Option<Waker<'static>>>() == mem::size_of::<Waker<'static>>());
39};