#[derive(Clone, Debug)]
pub enum Backoff {
Fixed(std::time::Duration),
Exponential {
base: std::time::Duration,
factor: f64,
max: std::time::Duration,
jitter: bool,
},
}
#[derive(Clone, Debug)]
pub struct RetryConfig {
pub enabled: bool,
pub max_retries: u32,
pub backoff: Backoff,
pub retry_on_status: Vec<u16>,
pub retry_on_timeout: bool,
pub retry_on_connect: bool,
}
impl Default for RetryConfig {
fn default() -> Self {
Self {
enabled: true,
max_retries: 4,
backoff: Backoff::Exponential {
base: std::time::Duration::from_millis(200),
factor: 2.0,
max: std::time::Duration::from_secs(3),
jitter: true,
},
retry_on_status: vec![408, 429, 500, 502, 503, 504],
retry_on_timeout: true,
retry_on_connect: true,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum CacheMode {
Use,
Refresh,
Bypass,
}