Skip to content

Latest commit

 

History

History
47 lines (36 loc) · 1.63 KB

README.md

File metadata and controls

47 lines (36 loc) · 1.63 KB

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())
});