Skip to content

Lightweight stack allocated rate limiter implementations for Rust

License

Notifications You must be signed in to change notification settings

jmlepisto/burster

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

Lightweight stack allocated rate limiter implementations for Rust

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages