Skip to content

Instantly share code, notes, and snippets.

@kristate
Created March 11, 2018 16:19
Show Gist options
  • Save kristate/ee2208da350181d52dff7631a989e046 to your computer and use it in GitHub Desktop.
Save kristate/ee2208da350181d52dff7631a989e046 to your computer and use it in GitHub Desktop.
Not sure if I will ever have any use for this.
enum PollerEnum {
Item(()),
Timer,
}
struct Poller {
timer: Interval,
inner_iter: Option<Box<futures::stream::IterOk<std::vec::IntoIter<()>, std::io::Error>>>,
}
impl Future for Poller {
type Item = PollerEnum;
type Error = std::io::Error;
fn poll(&mut self)
-> Poll<PollerEnum, std::io::Error>
{
if self.inner_iter.is_some() {
match self.inner_iter.as_mut().unwrap().poll()? {
Async::Ready( item ) => {
return Ok(Async::Ready(PollerEnum::Item(item.unwrap())));
},
Async::NotReady => {
self.inner_iter = None;
},
};
}
match self.timer.poll()? {
Async::Ready(_) => {
self.inner_iter = Some(Box::new(stream::iter_ok::<_, std::io::Error>(vec![(), ()])));
Ok(Async::Ready(PollerEnum::Timer))
},
Async::NotReady => {
Ok(Async::NotReady)
},
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment