virtual_mio/
waker.rs

1use std::task::{Context, Poll, Waker};
2
3use futures::Future;
4
5pub fn block_on<'a, A>(task: impl Future<Output = A> + 'a) -> A {
6    // Create the waker
7    let (parker, unparker) = parking::pair();
8    let waker = Waker::from(unparker.clone());
9    let mut cx = Context::from_waker(&waker);
10
11    let mut task = Box::pin(task);
12    loop {
13        match task.as_mut().poll(&mut cx) {
14            Poll::Pending => {
15                parker.park();
16            }
17            Poll::Ready(ret) => {
18                return ret;
19            }
20        }
21    }
22}