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
use super::{Context, Effectful, Poll};
use std::pin::Pin;
#[derive(Debug)]
pub struct PollFn<F>(F);
impl<F> Unpin for PollFn<F> {}
impl<T, Effect, F> Effectful for PollFn<F>
where
F: FnMut(&Context) -> Poll<T, Effect>,
{
type Output = T;
type Effect = Effect;
fn poll(mut self: Pin<&mut Self>, cx: &Context) -> Poll<Self::Output, Self::Effect> {
(&mut self.0)(cx)
}
}
pub fn poll_fn<T, Effect, F: FnMut(&Context) -> Poll<T, Effect>>(f: F) -> PollFn<F> {
PollFn(f)
}