try-again 0.2.2

Retry synchronous and asynchronous operations.
Documentation
use crate::StdDuration;
use crate::tracked_iterator::{FiniteIterator, IntoTrackedIterator};

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct None;

impl None {
    pub fn take(self, count: usize) -> FiniteIterator<std::iter::Take<None>> {
        self.into_tracked().take(count)
    }
}

impl Iterator for None {
    type Item = StdDuration;

    fn next(&mut self) -> Option<Self::Item> {
        Some(StdDuration::ZERO)
    }
}

#[cfg(test)]
mod test {
    use super::*;
    use assertr::prelude::*;

    #[test]
    fn no_delay_strategy_always_returns_zero_duration() {
        let mut delay = None.take(3);

        assert_that(delay.next())
            .is_some()
            .is_equal_to(StdDuration::ZERO);
        assert_that(delay.next())
            .is_some()
            .is_equal_to(StdDuration::ZERO);
        assert_that(delay.next())
            .is_some()
            .is_equal_to(StdDuration::ZERO);
        assert_that(delay.next()).is_none();
    }
}