try_again/delay/
fixed.rs

1use crate::StdDuration;
2use crate::tracked_iterator::{FiniteIterator, IntoTrackedIterator};
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq)]
5pub struct Fixed {
6    pub delay: StdDuration,
7}
8
9impl Fixed {
10    pub fn of(delay: impl Into<StdDuration>) -> Self {
11        Self {
12            delay: delay.into(),
13        }
14    }
15
16    pub fn take(self, count: usize) -> FiniteIterator<std::iter::Take<Fixed>> {
17        self.into_tracked().take(count)
18    }
19}
20
21impl Iterator for Fixed {
22    type Item = StdDuration;
23
24    fn next(&mut self) -> Option<Self::Item> {
25        Some(self.delay)
26    }
27}
28
29#[cfg(test)]
30mod test {
31    use super::*;
32    use crate::IntoStdDuration;
33    use assertr::prelude::*;
34
35    #[test]
36    fn static_delay_strategy_always_returns_the_configured_delay() {
37        let mut delay = Fixed::of(50.millis()).take(3);
38
39        assert_that(delay.next()).is_some().is_equal_to(50.millis());
40        assert_that(delay.next()).is_some().is_equal_to(50.millis());
41        assert_that(delay.next()).is_some().is_equal_to(50.millis());
42        assert_that(delay.next()).is_none();
43    }
44}