tokio_timer/
interval.rs

1use futures::{Future, Stream, Async, Poll};
2
3use {Sleep, TimerError};
4
5use std::time::Duration;
6
7/// A stream representing notifications at fixed interval
8///
9/// Intervals are created through `Timer::interval`.
10#[derive(Debug)]
11pub struct Interval {
12    sleep: Sleep,
13    duration: Duration,
14}
15
16/// Create a new interval
17pub 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        // Reset the timeout
32        self.sleep = self.sleep.timer().sleep(self.duration);
33
34        Ok(Async::Ready(Some(())))
35    }
36}