use crate::errors::FluxLimiterError;
#[derive(Debug, Clone)]
pub struct FluxLimiterConfig {
pub(crate) rate_per_second: f64,
pub(crate) burst_capacity: f64,
}
impl FluxLimiterConfig {
pub fn new(rate_per_second: f64, burst_capacity: f64) -> Self {
Self {
rate_per_second,
burst_capacity,
}
}
pub fn rate(mut self, rate_per_second: f64) -> Self {
self.rate_per_second = rate_per_second;
self
}
pub fn burst(mut self, burst_capacity: f64) -> Self {
self.burst_capacity = burst_capacity;
self
}
pub fn validate(&self) -> Result<(), FluxLimiterError> {
if self.rate_per_second <= 0.0 {
return Err(FluxLimiterError::InvalidRate);
}
if self.burst_capacity < 0.0 {
return Err(FluxLimiterError::InvalidBurst);
}
Ok(())
}
}