Crate leaky_bucket_lite
source · [−]Expand description
leaky-bucket-lite
A token-based rate limiter based on the leaky bucket algorithm, mainly a lazy reimplementation of udoprog’s leaky-bucket with less dependencies and overhead.
If the tokens are already available, the acquisition will be instant through a fast path, and the acquired number of tokens will be added to the bucket.
If they aren’t, the task that tried to acquire the tokens will be suspended until the required number of tokens has been added.
Usage
Add the following to your Cargo.toml
:
leaky-bucket-lite = "0.5"
Features
leaky-bucket-lite provides 3 implementations:
LeakyBucket
(thread-safe, available via thetokio
feature, which is on by default)sync_threadsafe::LeakyBucket
(thread-safe, available via thesync-threadsafe
feature)sync::LeakyBucket
(not thread-safe, available via thesync
feature).
For potential performance increase with sync-threadsafe
or tokio
using parking_lot
’s locking objects, enable the parking_lot
feature.
Example
use leaky_bucket_lite::LeakyBucket;
use std::time::Duration;
#[tokio::main]
async fn main() {
let rate_limiter = LeakyBucket::builder()
.max(5)
.tokens(0)
.refill_interval(Duration::from_secs(1))
.refill_amount(1)
.build();
println!("Waiting for permit...");
// should take about 5 seconds to acquire.
rate_limiter.acquire(5).await;
println!("I made it!");
}
Modules
Sync, not thread-safe implementation of leaky-bucket for minimal applications.
Sync, thread-safe implementation of leaky-bucket for minimal applications.
Structs
Builder for a leaky bucket.
The leaky bucket.