use std::time::Duration;
use crate::retry::Backoff;
use crate::retry::constants::{DEFAULT_BACKOFF, DEFAULT_BASE_DELAY, DEFAULT_RETRY_ATTEMPTS, DEFAULT_USE_JITTER};
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(any(feature = "serde", test), derive(serde::Serialize, serde::Deserialize))]
#[non_exhaustive]
pub struct RetryConfig {
pub enabled: bool,
pub backoff_type: Backoff,
#[cfg_attr(
any(feature = "serde", test),
serde(with = "jiff::fmt::serde::unsigned_duration::friendly::compact::required")
)]
pub base_delay: Duration,
#[cfg_attr(
any(feature = "serde", test),
serde(with = "jiff::fmt::serde::unsigned_duration::friendly::compact::optional")
)]
pub max_delay: Option<Duration>,
pub use_jitter: bool,
pub max_retry_attempts: u32,
pub handle_unavailable: bool,
}
impl Default for RetryConfig {
fn default() -> Self {
Self {
enabled: true,
backoff_type: DEFAULT_BACKOFF,
base_delay: DEFAULT_BASE_DELAY,
max_delay: None,
use_jitter: DEFAULT_USE_JITTER,
max_retry_attempts: DEFAULT_RETRY_ATTEMPTS,
handle_unavailable: false,
}
}
}
#[cfg_attr(coverage_nightly, coverage(off))]
#[cfg(test)]
mod tests {
use super::*;
#[test]
#[cfg_attr(miri, ignore)]
fn default_snapshot() {
let config = RetryConfig::default();
insta::assert_json_snapshot!(config);
}
}