flux_limiter/
config.rs

1// src/config.rs
2
3//! Configuration types for the flux limiter
4
5// dependencies
6use crate::errors::FluxLimiterError;
7
8/// Configuration for rate limiter behavior.
9///
10/// # Examples
11///
12/// ```rust
13/// use flux_limiter::FluxLimiterConfig;
14///
15/// let config = FluxLimiterConfig::new(10.0, 5.0)
16///     .rate(20.0)
17///     .burst(10.0);
18/// ```
19
20#[derive(Debug, Clone)]
21pub struct FluxLimiterConfig {
22    pub(crate) rate_per_second: f64,
23    pub(crate) burst_capacity: f64,
24}
25
26impl FluxLimiterConfig {
27    /// Create a new configuration with rate and burst settings.
28    ///
29    /// # Arguments
30    ///
31    /// * `rate_per_second` - Maximum sustained rate (must be > 0)
32    /// * `burst_capacity` - Additional burst allowance (must be ≥ 0)
33    pub fn new(rate_per_second: f64, burst_capacity: f64) -> Self {
34        Self {
35            rate_per_second,
36            burst_capacity,
37        }
38    }
39
40    /// Builder-style: set rate per second
41    pub fn rate(mut self, rate_per_second: f64) -> Self {
42        self.rate_per_second = rate_per_second;
43        self
44    }
45
46    /// Builder-style: set burst capacity  
47    pub fn burst(mut self, burst_capacity: f64) -> Self {
48        self.burst_capacity = burst_capacity;
49        self
50    }
51
52    /// Validate the configuration
53    pub fn validate(&self) -> Result<(), FluxLimiterError> {
54        if self.rate_per_second <= 0.0 {
55            return Err(FluxLimiterError::InvalidRate);
56        }
57        if self.burst_capacity < 0.0 {
58            return Err(FluxLimiterError::InvalidBurst);
59        }
60        Ok(())
61    }
62}