1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
use core::{
future::Future,
pin::Pin,
task::{Context, Poll},
};
#[derive(Debug)]
#[must_use]
pub struct DoYield {
done: bool,
}
impl Future for DoYield {
type Output = ();
fn poll(mut self: Pin<&mut Self>, cx: &mut Context) -> Poll<()> {
if self.done {
Poll::Ready(())
} else {
self.done = true;
cx.waker().wake_by_ref();
Poll::Pending
}
}
}
pub fn do_yield() -> DoYield {
DoYield { done: false }
}