use std::time::Duration;
#[derive(Debug, Clone, Copy)]
pub struct Quota {
interval: Duration,
pub burst: u32,
}
impl Quota {
pub fn per_second(n: u32) -> Self {
Self {
interval: Duration::from_secs_f64(1.0 / n as f64),
burst: n,
}
}
pub fn per_minute(n: u32) -> Self {
Self {
interval: Duration::from_secs_f64(60.0 / n as f64),
burst: n,
}
}
pub fn per_hour(n: u32) -> Self {
Self {
interval: Duration::from_secs_f64(3600.0 / n as f64),
burst: n,
}
}
pub fn allow_burst(mut self, burst: u32) -> Self {
self.burst = burst;
self
}
pub fn from_parts(interval: Duration, burst: u32) -> Self {
Self { interval, burst }
}
pub fn interval(&self) -> Duration {
self.interval
}
}