use std::time::Duration;
#[derive(Debug, Clone)]
pub struct RetryPolicy {
pub max_attempts: u32,
pub base_delay: Duration,
pub jitter: bool,
}
impl Default for RetryPolicy {
fn default() -> Self {
Self {
max_attempts: 3,
base_delay: Duration::from_millis(500),
jitter: true,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_values_are_sensible() {
let p = RetryPolicy::default();
assert_eq!(p.max_attempts, 3);
assert_eq!(p.base_delay, Duration::from_millis(500));
assert!(p.jitter, "jitter should be on by default");
}
#[test]
fn clone_is_independent() {
let a = RetryPolicy {
max_attempts: 5,
base_delay: Duration::from_millis(100),
jitter: false,
};
let b = a.clone();
assert_eq!(b.max_attempts, 5);
assert_eq!(b.base_delay, Duration::from_millis(100));
assert!(!b.jitter);
}
#[test]
fn custom_values_are_preserved() {
let p = RetryPolicy {
max_attempts: 10,
base_delay: Duration::from_secs(2),
..Default::default()
};
assert_eq!(p.max_attempts, 10);
assert_eq!(p.base_delay, Duration::from_secs(2));
assert!(p.jitter); }
}