Skip to main content

Crate ratelimit

Crate ratelimit 

Source
Expand description

A lock-free token bucket ratelimiter that can be shared between threads.

The ratelimiter uses scaled tokens internally for sub-token precision, allowing accurate rate limiting at any rate without requiring callers to tune refill intervals.

use ratelimit::Ratelimiter;

// 1000 requests/s, no initial tokens, burst limited to 1 second
let ratelimiter = Ratelimiter::new(1000);

// Custom burst capacity and initial tokens
let ratelimiter = Ratelimiter::builder(1000)
    .max_tokens(5000)
    .initial_available(100)
    .build()
    .unwrap();

// Rate of 0 means unlimited — try_wait() always succeeds
let ratelimiter = Ratelimiter::new(0);
assert!(ratelimiter.try_wait().is_ok());

// Sleep-wait loop
let ratelimiter = Ratelimiter::new(100);
for _ in 0..10 {
    while let Err(wait) = ratelimiter.try_wait() {
        std::thread::sleep(wait);
    }
    // do some ratelimited action here
}

Structs§

Builder
Builder for constructing a Ratelimiter with custom settings.
Ratelimiter
A lock-free token bucket ratelimiter.

Enums§

Error