1use std::time::Duration;
2
3#[derive(Debug, Clone)]
5pub struct Quota {
6 interval: Duration,
8 pub burst: u32,
10}
11
12impl Quota {
13 pub fn per_second(n: u32) -> Self {
15 Self {
16 interval: Duration::from_secs_f64(1.0 / n as f64),
17 burst: n,
18 }
19 }
20
21 pub fn per_minute(n: u32) -> Self {
23 Self {
24 interval: Duration::from_secs_f64(60.0 / n as f64),
25 burst: n,
26 }
27 }
28
29 pub fn per_hour(n: u32) -> Self {
31 Self {
32 interval: Duration::from_secs_f64(3600.0 / n as f64),
33 burst: n,
34 }
35 }
36
37 pub fn allow_burst(mut self, burst: u32) -> Self {
39 self.burst = burst;
40 self
41 }
42
43 pub fn interval(&self) -> Duration {
45 self.interval
46 }
47}