#token-bucket #rate-limiting #stack-allocated #networking #no-alloc #no-std

no-std burster

Lightweight stack allocated rate limiter implementations

2 releases

0.1.1 Oct 30, 2024
0.1.0 Oct 30, 2024

#575 in Algorithms

Download history 215/week @ 2024-10-26 56/week @ 2024-11-02 4/week @ 2024-11-09 36/week @ 2024-11-16

311 downloads per month
Used in chokepoint

MIT license

29KB
415 lines

Burster ⏩

Crates.io Version docs.rs

Burster is a high quality and lightweigh crate providing stack allocated rate limiters with minimal dependencies. Guaranteed to work on no_std targets, but also comfortable on standard targets.

Supported rate limiter types

  • Token bucket
  • Fixed window
  • Sliding window log
  • Sliding window counter
  • ..something else? Make a request or open a PR :)

Usage

On std targets usage is simple. Install the crate with default features enabled and you'll get access to straightforward utility functions for instantiating limiters.

// Instantiate a token bucket that allowes an average consume
// rate of 100 tokens per second and with bucket_size = 10
let mut bucket = burster::token_bucket(100, 10);

// Use the bucket:
if bucket.try_consume_one().is_ok() {
    // All good, enough tokens left
} else {
    // Not enough tokens for this consume
}

On no_std targets you'll have to install the crate with default features disabled and provide bindings to your platforms clock functionality in the form of a closure that returns the current timestamp as Duration from some fixed epoch in the past.

// Instantiate a token bucket that allowes an average consume
// rate of 100 tokens per second and with bucket_size = 10
let mut bucket = burster::TokenBucket::new_with_time_provider(100, 10, || {
    // Return current timestamp
    Duration::from_micros(get_platform_micros_from_boot())
});

Dependencies