Guest User

Untitled

a guest
Oct 15th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.97 KB | None | 0 0
  1. extern crate futures; // 0.1.24
  2.  
  3. use futures::{Async, Poll, Stream, task::{self, Task}};
  4.  
  5. struct Evens {
  6. n: u32,
  7. pause: bool,
  8. task: Option<Task>,
  9. }
  10.  
  11. impl Default for Evens {
  12. fn default() -> Evens {
  13. Evens {n: 0, pause: false, task: None}
  14. }
  15. }
  16.  
  17. impl Stream for Evens {
  18. type Item = u32;
  19. type Error = ();
  20.  
  21. fn poll(&mut self) -> Poll<Option<Self::Item>, Self::Error> {
  22. let pause = self.pause;
  23. self.pause = !pause;
  24. if pause {
  25. self.task = Some(task::current());
  26. Ok(Async::NotReady)
  27. } else {
  28. let n = self.n;
  29. self.n += 2;
  30. Ok(Async::Ready(Some(n)))
  31. }
  32. }
  33. }
  34.  
  35. fn main() -> Result<(), ()> {
  36. let mut evens = Evens::default();
  37. loop {
  38. match evens.poll()? {
  39. Async::NotReady => if let Some(task) = evens.task.take() {
  40. task.notify();
  41. },
  42. Async::Ready(val) => println!("{:?}", val),
  43. }
  44. }
  45. }
Add Comment
Please, Sign In to add comment