use super::delay_strategy::RetryDelayStrategy;
use std::time::Duration;
pub trait RetryConfig {
const KEY_MAX_ATTEMPTS: &'static str = "retry.max_attempts";
const KEY_DELAY_STRATEGY: &'static str = "retry.delay_strategy";
const KEY_FIXED_DELAY: &'static str = "retry.fixed_delay_millis";
const KEY_RANDOM_MIN_DELAY: &'static str = "retry.random_min_delay_millis";
const KEY_RANDOM_MAX_DELAY: &'static str = "retry.random_max_delay_millis";
const KEY_BACKOFF_INITIAL_DELAY: &'static str = "retry.backoff_initial_delay_millis";
const KEY_BACKOFF_MAX_DELAY: &'static str = "retry.backoff_max_delay_millis";
const KEY_BACKOFF_MULTIPLIER: &'static str = "retry.backoff_multiplier";
const KEY_JITTER_FACTOR: &'static str = "retry.jitter_factor";
const KEY_MAX_DURATION: &'static str = "retry.max_duration_millis";
const KEY_OPERATION_TIMEOUT: &'static str = "retry.operation_timeout_millis";
const DEFAULT_MAX_ATTEMPTS: u32 = 5;
const DEFAULT_DELAY_STRATEGY: RetryDelayStrategy = RetryDelayStrategy::ExponentialBackoff {
initial_delay: Duration::from_millis(1000),
max_delay: Duration::from_secs(60),
multiplier: 2.0,
};
const DEFAULT_FIXED_DELAY_MILLIS: u64 = 1000;
const DEFAULT_RANDOM_MIN_DELAY_MILLIS: u64 = 1000;
const DEFAULT_RANDOM_MAX_DELAY_MILLIS: u64 = 10000;
const DEFAULT_BACKOFF_INITIAL_DELAY_MILLIS: u64 = 1000;
const DEFAULT_BACKOFF_MAX_DELAY_MILLIS: u64 = 60000;
const DEFAULT_BACKOFF_MULTIPLIER: f64 = 2.0;
const DEFAULT_JITTER_FACTOR: f64 = 0.0;
const DEFAULT_MAX_DURATION_MILLIS: u64 = 0;
const DEFAULT_OPERATION_TIMEOUT_MILLIS: u64 = 0;
fn max_attempts(&self) -> u32;
fn set_max_attempts(&mut self, max_attempts: u32) -> &mut Self;
fn max_duration(&self) -> Option<Duration>;
fn set_max_duration(&mut self, max_duration: Option<Duration>) -> &mut Self;
fn operation_timeout(&self) -> Option<Duration>;
fn set_operation_timeout(&mut self, timeout: Option<Duration>) -> &mut Self;
fn delay_strategy(&self) -> RetryDelayStrategy;
fn set_delay_strategy(&mut self, delay_strategy: RetryDelayStrategy) -> &mut Self;
fn jitter_factor(&self) -> f64;
fn set_jitter_factor(&mut self, jitter_factor: f64) -> &mut Self;
fn set_random_delay_strategy(&mut self, min_delay: Duration, max_delay: Duration) -> &mut Self {
self.set_delay_strategy(RetryDelayStrategy::random(min_delay, max_delay));
self
}
fn set_fixed_delay_strategy(&mut self, delay: Duration) -> &mut Self {
self.set_delay_strategy(RetryDelayStrategy::fixed(delay));
self
}
fn set_exponential_backoff_strategy(
&mut self,
initial_delay: Duration,
max_delay: Duration,
multiplier: f64,
) -> &mut Self {
self.set_delay_strategy(RetryDelayStrategy::exponential_backoff(
initial_delay,
max_delay,
multiplier,
));
self
}
fn set_no_delay_strategy(&mut self) -> &mut Self {
self.set_delay_strategy(RetryDelayStrategy::none());
self
}
fn set_unlimited_duration(&mut self) -> &mut Self {
self.set_max_duration(None);
self
}
fn set_unlimited_operation_timeout(&mut self) -> &mut Self {
self.set_operation_timeout(None);
self
}
}