1use futures::{Future, Stream, Async, Poll};
2
3use {Sleep, TimerError};
4
5use std::time::Duration;
6
7#[derive(Debug)]
11pub struct Interval {
12 sleep: Sleep,
13 duration: Duration,
14}
15
16pub fn new(sleep: Sleep, dur: Duration) -> Interval {
18 Interval {
19 sleep: sleep,
20 duration: dur,
21 }
22}
23
24impl Stream for Interval {
25 type Item = ();
26 type Error = TimerError;
27
28 fn poll(&mut self) -> Poll<Option<()>, TimerError> {
29 let _ = try_ready!(self.sleep.poll());
30
31 self.sleep = self.sleep.timer().sleep(self.duration);
33
34 Ok(Async::Ready(Some(())))
35 }
36}