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}