ai_lib/circuit_breaker/
config.rs

1//! Circuit breaker configuration
2
3use serde::{Deserialize, Serialize};
4use std::time::Duration;
5
6/// Configuration for circuit breaker behavior
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct CircuitBreakerConfig {
9    /// Number of consecutive failures before opening the circuit
10    pub failure_threshold: u32,
11    /// Time to wait before attempting to close the circuit
12    pub recovery_timeout: Duration,
13    /// Number of successful requests needed to close the circuit from half-open state
14    pub success_threshold: u32,
15    /// Timeout for individual requests
16    pub request_timeout: Duration,
17}
18
19impl Default for CircuitBreakerConfig {
20    fn default() -> Self {
21        Self {
22            failure_threshold: 5,
23            recovery_timeout: Duration::from_secs(30),
24            success_threshold: 3,
25            request_timeout: Duration::from_secs(10),
26        }
27    }
28}
29
30impl CircuitBreakerConfig {
31    /// Create a production-ready configuration
32    pub fn production() -> Self {
33        Self {
34            failure_threshold: 3,
35            recovery_timeout: Duration::from_secs(60),
36            success_threshold: 2,
37            request_timeout: Duration::from_secs(15),
38        }
39    }
40
41    /// Create a development configuration with more lenient settings
42    pub fn development() -> Self {
43        Self {
44            failure_threshold: 10,
45            recovery_timeout: Duration::from_secs(15),
46            success_threshold: 5,
47            request_timeout: Duration::from_secs(5),
48        }
49    }
50
51    /// Create a conservative configuration for critical systems
52    pub fn conservative() -> Self {
53        Self {
54            failure_threshold: 2,
55            recovery_timeout: Duration::from_secs(120),
56            success_threshold: 5,
57            request_timeout: Duration::from_secs(30),
58        }
59    }
60}