use serde::{Deserialize, Serialize};
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct CircuitBreakerConfig {
#[serde(default = "default_circuit_breaker_enabled")]
pub enabled: bool,
#[serde(default = "default_failure_threshold")]
pub failure_threshold: u32,
#[serde(default = "default_pause_on_open")]
pause_on_open: bool,
#[serde(default = "default_max_open_circuits")]
max_open_circuits: usize,
#[serde(default = "default_recovery_cooldown")]
pub recovery_cooldown: u64,
}
impl Default for CircuitBreakerConfig {
fn default() -> Self {
Self {
enabled: default_circuit_breaker_enabled(),
failure_threshold: default_failure_threshold(),
pause_on_open: default_pause_on_open(),
max_open_circuits: default_max_open_circuits(),
recovery_cooldown: default_recovery_cooldown(),
}
}
}
#[inline]
const fn default_circuit_breaker_enabled() -> bool {
true }
#[inline]
const fn default_failure_threshold() -> u32 {
7 }
#[inline]
const fn default_pause_on_open() -> bool {
true }
#[inline]
const fn default_max_open_circuits() -> usize {
3 }
#[inline]
const fn default_recovery_cooldown() -> u64 {
60 }