retry_backoff/backoffs/
impl_backoff_rs.rs

1use core::time::Duration;
2
3pub use backoff_rs::{Exponential as Backoff, ExponentialBackoffBuilder};
4
5use crate::retry_backoff::RetryBackoff;
6
7//
8impl RetryBackoff for Backoff {
9    fn delay(&self, attempts: usize) -> Duration {
10        self.duration(attempts.saturating_sub(1))
11    }
12
13    fn name(&self) -> &str {
14        "CrateBackoffRs"
15    }
16}
17
18#[cfg(test)]
19mod tests {
20    use super::*;
21
22    #[test]
23    fn test_impl_retry_backoff() {
24        // Ref https://github.com/rust-playground/backoff-rs/blob/master/src/lib.rs#L116
25        let backoff = ExponentialBackoffBuilder::default()
26            .jitter(Duration::default())
27            .max(Duration::from_secs(5))
28            .build();
29
30        assert_eq!(RetryBackoff::delay(&backoff, 1), Duration::from_millis(500));
31        assert_eq!(RetryBackoff::name(&backoff), "CrateBackoffRs");
32    }
33}