use std::time::Duration;
use backon::ExponentialBuilder;
#[derive(Clone, Debug)]
pub struct RetryPolicy {
pub max_retries: usize,
pub min_delay: Duration,
pub max_delay: Duration,
pub jitter: bool,
}
impl Default for RetryPolicy {
fn default() -> Self {
Self {
max_retries: 3,
min_delay: Duration::from_secs(1),
max_delay: Duration::from_secs(2),
jitter: false,
}
}
}
impl RetryPolicy {
pub(crate) fn backoff(&self) -> ExponentialBuilder {
let builder = ExponentialBuilder::default()
.with_min_delay(self.min_delay)
.with_max_delay(self.max_delay)
.with_max_times(self.max_retries);
if self.jitter {
builder.with_jitter()
} else {
builder
}
}
}