use crate::prelude::{Deserialize, Serialize};
use crate::utils::config::get_env_or_none;
use pretty_simple_display::{DebugPretty, DisplaySimple};
#[derive(DebugPretty, DisplaySimple, Clone, Deserialize, Serialize)]
pub struct RetryConfig {
pub max_retry_count: Option<u32>,
pub retry_delay_secs: Option<u64>,
}
impl RetryConfig {
#[must_use]
pub fn new() -> Self {
Self::default()
}
#[must_use]
pub fn infinite() -> Self {
Self {
max_retry_count: None, retry_delay_secs: get_env_or_none("RETRY_DELAY_SECS"),
}
}
#[must_use]
pub fn with_max_retries(max_retries: u32) -> Self {
Self {
max_retry_count: Some(max_retries),
retry_delay_secs: get_env_or_none("RETRY_DELAY_SECS"),
}
}
#[must_use]
pub fn with_delay(delay_secs: u64) -> Self {
Self {
max_retry_count: None, retry_delay_secs: Some(delay_secs),
}
}
#[must_use]
pub fn with_max_retries_and_delay(max_retries: u32, delay_secs: u64) -> Self {
Self {
max_retry_count: Some(max_retries),
retry_delay_secs: Some(delay_secs),
}
}
#[must_use]
pub fn max_retries(&self) -> u32 {
self.max_retry_count.unwrap_or(0)
}
#[must_use]
pub fn delay_secs(&self) -> u64 {
self.retry_delay_secs.unwrap_or(10)
}
}
impl Default for RetryConfig {
fn default() -> Self {
let max_retry_count: Option<u32> = get_env_or_none("MAX_RETRY_COUNT");
let retry_delay_secs: Option<u64> = get_env_or_none("RETRY_DELAY_SECS");
Self {
max_retry_count,
retry_delay_secs,
}
}
}