use std::time::Duration;
#[derive(Debug, Clone)]
pub struct RetryPolicy {
pub max_retries: u32,
pub base_delay: Duration,
pub max_delay: Duration,
}
impl Default for RetryPolicy {
fn default() -> Self {
RetryPolicy {
max_retries: 3,
base_delay: Duration::from_millis(500),
max_delay: Duration::from_secs(30),
}
}
}
impl RetryPolicy {
pub fn delay_for_attempt(&self, attempt: u32) -> Duration {
let delay = self.base_delay.saturating_mul(2u32.saturating_pow(attempt));
delay.min(self.max_delay)
}
}