use std::sync::Arc;
use std::task::{Wake, Waker};
pub struct VedaWaker {
task_id: usize,
}
impl VedaWaker {
pub fn new(task_id: usize) -> Self {
Self { task_id }
}
pub fn task_id(&self) -> usize {
self.task_id
}
pub fn into_waker(self) -> Waker {
Arc::new(self).into()
}
}
impl Wake for VedaWaker {
fn wake(self: Arc<Self>) {
self.wake_by_ref()
}
fn wake_by_ref(self: &Arc<Self>) {
eprintln!("Waking task {}", self.task_id);
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_veda_waker() {
let waker = VedaWaker::new(42);
assert_eq!(waker.task_id(), 42);
let std_waker = waker.into_waker();
std_waker.wake();
}
}