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}