use tokenbucket::TokenBucket;
use tokenbucket::TokenAcquisitionResult;
use std::{thread, time};
fn run(bucket: &mut TokenBucket, rate: u32, duration: u32) {
for _ in 0..=(rate * duration) {
let acquisition: TokenAcquisitionResult = bucket.acquire(1.0);
match acquisition {
Ok(rate) => println!("rate/allow: {}, true", rate),
Err(rate) => println!("rate/allow: {}, false", rate),
}
thread::sleep(time::Duration::from_micros(
(1000000.0 * (1.0 / rate as f64)) as u64,
));
}
}
fn main() {
let mut token_bucket: TokenBucket = TokenBucket::new(5.0, 100.0);
run(&mut token_bucket, 60, 10);
run(&mut token_bucket, 2, 10);
}