pub use backoff;
use {
crate::primitives::BackoffFactory,
backoff::{ExponentialBackoffBuilder, backoff::Backoff},
core::{fmt::Debug, time::Duration},
derive_builder::Builder,
std::sync::Arc,
};
#[derive(Builder, Clone)]
#[builder(pattern = "owned", setter(prefix = "with"), derive(Clone))]
#[builder_struct_attr(doc(hidden))]
pub struct Config {
#[builder(
setter(custom),
default = "Arc::new(|| Box::new(ExponentialBackoffBuilder::default() \
.with_max_elapsed_time(Some(Duration::from_secs(300))) \
.build()))"
)]
pub backoff: BackoffFactory,
}
impl Config {
pub fn builder() -> ConfigBuilder {
ConfigBuilder::default()
}
}
impl ConfigBuilder {
#[must_use]
pub fn with_backoff<B: Backoff + Clone + Send + Sync + 'static>(
mut self,
backoff: B,
) -> Self {
self.backoff = Some(Arc::new(move || Box::new(backoff.clone())));
self
}
}
impl core::fmt::Debug for Config {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
f.debug_struct("Config")
.field("backoff", &"<backoff factory>")
.finish()
}
}
impl core::fmt::Debug for ConfigBuilder {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
f.debug_struct("Config")
.field("backoff", &"<backoff factory>")
.finish()
}
}