pub enum BackoffStrategy {
Fixed(Duration),
Exponential {
initial: Duration,
max: Duration,
},
Linear {
initial: Duration,
increment: Duration,
max: Duration,
},
Fibonacci {
initial: Duration,
max: Duration,
},
Custom(Arc<dyn Fn(usize) -> Duration + Send + Sync>),
}Expand description
Defines the delay between restart attempts
Variants§
Fixed(Duration)
Fixed delay between restarts
Example: Always wait 5 seconds
Exponential
Exponential backoff: initial * 2^(attempt-1), capped at max
Example: 2s -> 4s -> 8s -> 16s -> … -> 60s (max)
Best for: Network failures, external service issues
Linear
Linear backoff: initial + (increment * attempt)
Example: 5s -> 10s -> 15s -> 20s -> … -> 60s (max)
Best for: Predictable delay patterns
Fibonacci
Fibonacci backoff: delays follow Fibonacci sequence
Example: 1s -> 1s -> 2s -> 3s -> 5s -> 8s -> … -> max
Best for: Graceful degradation scenarios
Custom(Arc<dyn Fn(usize) -> Duration + Send + Sync>)
Custom backoff with user-defined delay calculation
Receives attempt number, returns delay duration. Wrapped in Arc for correct cloning behavior.
Implementations§
Source§impl BackoffStrategy
impl BackoffStrategy
Sourcepub fn calculate_delay(&self, attempt: usize) -> Duration
pub fn calculate_delay(&self, attempt: usize) -> Duration
Calculate the delay for a given attempt number (1-indexed)
Sourcepub fn exponential() -> Self
pub fn exponential() -> Self
Create exponential backoff with defaults (2s -> 60s)
Sourcepub fn exponential_custom(initial: Duration, max: Duration) -> Self
pub fn exponential_custom(initial: Duration, max: Duration) -> Self
Create exponential backoff with custom parameters
Sourcepub fn linear_custom(
initial: Duration,
increment: Duration,
max: Duration,
) -> Self
pub fn linear_custom( initial: Duration, increment: Duration, max: Duration, ) -> Self
Create linear backoff with custom parameters
Sourcepub fn fibonacci_with_default() -> Self
pub fn fibonacci_with_default() -> Self
Create Fibonacci backoff with defaults (1s -> 60s)