mod constant;
mod exponential;
mod jitter;
mod model;
pub use constant::ConstantBackoff;
pub use exponential::ExponentialBackoff;
pub use model::ModelBasedBackoff;
pub trait Backoff: Send + Sync + core::fmt::Debug {
fn backoff(&self, attempt: u32);
}
fn spin(count: u32) {
for _ in 0..count {
core::hint::spin_loop();
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum BackoffStrategy {
Constant(ConstantBackoff),
Exponential(ExponentialBackoff),
ModelBased(ModelBasedBackoff),
}
impl Backoff for BackoffStrategy {
fn backoff(&self, attempt: u32) {
match self {
Self::Constant(b) => b.backoff(attempt),
Self::Exponential(b) => b.backoff(attempt),
Self::ModelBased(b) => b.backoff(attempt),
}
}
}