use serde::{Deserialize, Serialize};
use std::time::Duration;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CircuitBreakerConfig {
pub failure_threshold: u32,
pub recovery_timeout: Duration,
pub success_threshold: u32,
pub request_timeout: Duration,
}
impl Default for CircuitBreakerConfig {
fn default() -> Self {
Self {
failure_threshold: 5,
recovery_timeout: Duration::from_secs(30),
success_threshold: 3,
request_timeout: Duration::from_secs(10),
}
}
}
impl CircuitBreakerConfig {
pub fn production() -> Self {
Self {
failure_threshold: 3,
recovery_timeout: Duration::from_secs(60),
success_threshold: 2,
request_timeout: Duration::from_secs(15),
}
}
pub fn development() -> Self {
Self {
failure_threshold: 10,
recovery_timeout: Duration::from_secs(15),
success_threshold: 5,
request_timeout: Duration::from_secs(5),
}
}
pub fn conservative() -> Self {
Self {
failure_threshold: 2,
recovery_timeout: Duration::from_secs(120),
success_threshold: 5,
request_timeout: Duration::from_secs(30),
}
}
}