use std::time::Duration;
pub use backon::{Backoff, FibonacciBackoff};
use backon::{BackoffBuilder, FibonacciBuilder};
pub fn background_backoff() -> FibonacciBackoff {
custom_backoff(Duration::from_secs(1), Duration::from_mins(1), None)
}
pub fn aggressive_backoff() -> FibonacciBackoff {
custom_backoff(Duration::from_millis(200), Duration::from_secs(5), Some(14))
}
pub fn aggressive_backoff_long() -> FibonacciBackoff {
custom_backoff(Duration::from_millis(200), Duration::from_secs(5), Some(25))
}
#[cfg(test)]
pub fn immediate_backoff(max_retries_or: Option<usize>) -> FibonacciBackoff {
custom_backoff(Duration::ZERO, Duration::ZERO, max_retries_or)
}
pub fn custom_backoff(
min_delay: Duration,
max_delay: Duration,
max_retries_or: Option<usize>,
) -> FibonacciBackoff {
FibonacciBuilder::default()
.with_jitter()
.with_min_delay(min_delay)
.with_max_delay(max_delay)
.with_max_times(max_retries_or.unwrap_or(usize::MAX))
.build()
}
pub fn fibonacci_max_one_hour() -> FibonacciBackoff {
custom_backoff(
Duration::from_millis(200),
Duration::from_secs(10),
Some(360),
)
}
pub fn api_networking_backoff() -> FibonacciBackoff {
custom_backoff(Duration::from_millis(250), Duration::from_secs(10), None)
}