Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extern crate futures; // 0.1.24
- use futures::{Async, Poll, Stream, task::{self, Task}};
- struct Evens {
- n: u32,
- pause: bool,
- task: Option<Task>,
- }
- impl Default for Evens {
- fn default() -> Evens {
- Evens {n: 0, pause: false, task: None}
- }
- }
- impl Stream for Evens {
- type Item = u32;
- type Error = ();
- fn poll(&mut self) -> Poll<Option<Self::Item>, Self::Error> {
- let pause = self.pause;
- self.pause = !pause;
- if pause {
- self.task = Some(task::current());
- Ok(Async::NotReady)
- } else {
- let n = self.n;
- self.n += 2;
- Ok(Async::Ready(Some(n)))
- }
- }
- }
- fn main() -> Result<(), ()> {
- let mut evens = Evens::default();
- loop {
- match evens.poll()? {
- Async::NotReady => if let Some(task) = evens.task.take() {
- task.notify();
- },
- Async::Ready(val) => println!("{:?}", val),
- }
- }
- }
Add Comment
Please, Sign In to add comment