use std::time::Duration;
#[derive(Debug, Clone, Copy)]
pub struct BackoffPolicy {
min_delay: Duration,
max_delay: Duration,
reset_after: Duration,
multiplier: f64,
}
impl BackoffPolicy {
pub fn new(
min_delay: std::time::Duration,
max_delay: std::time::Duration,
reset_after: std::time::Duration,
multiplier: f64,
) -> Self {
debug_assert!(reset_after > max_delay);
debug_assert!(max_delay > min_delay);
debug_assert!(min_delay > Duration::from_millis(0));
debug_assert!(multiplier > 1.0);
Self {
min_delay,
max_delay,
reset_after,
multiplier,
}
}
pub fn min_delay(&self) -> Duration {
self.min_delay
}
pub fn max_delay(&self) -> Duration {
self.max_delay
}
pub fn reset_after(&self) -> Duration {
self.reset_after
}
pub fn multiplier(&self) -> f64 {
self.multiplier
}
}
impl Default for BackoffPolicy {
fn default() -> Self {
Self {
min_delay: Duration::from_millis(50),
max_delay: Duration::from_secs(60),
reset_after: Duration::from_secs(120),
multiplier: 1.2,
}
}
}