garden-ratelimiter

Crates.iogarden-ratelimiter
lib.rsgarden-ratelimiter
version0.1.1
created_at2025-09-18 10:38:42.076189+00
updated_at2025-09-22 11:02:12.155201+00
descriptionA simple, in-memory sliding window rate limiter for Rust applications.
homepage
repository
max_upload_size
id1844547
size54,927
diwakrmatsa (21r21a33333)

documentation

README

Rate Limiter

A simple, in-memory sliding window rate limiter for Rust applications.

Features

  • Sliding window algorithm for accurate rate limiting
  • Per-key rate limiting (e.g., per API key or user)
  • In-memory cache with automatic expiration
  • Allow-list support for exempted keys
  • Asynchronous, suitable for use in async web frameworks

Usage

Add the crate to your dependencies.

Example usage:

use ratelimiter::RateLimiter;

#[tokio::main]
async fn main() {
    // Create a rate limiter (allow-list is optional)
    let limiter = RateLimiter::new(vec![]).await;

    let api_key = "user123";
    // Allow up to 10 requests per 60 seconds (60000 ms)
    let response = limiter.allow(api_key, 60_000, 10.0).await;

    if response.allow {
        // Proceed with request
    } else {
        // Rate limit exceeded, check response.headers.retry_after
    }
}

API

  • RateLimiter::new(allow_list: Vec<String>) -> RateLimiter - Create a new rate limiter.
  • allow(&self, key: &str, window_size_ms: i64, max_requests: f64) -> RateLimitResponse - Check if a request for the given key is allowed.
  • add_to_allow_list(&self, key: String) - Exempt a key from rate limiting.

License

MIT

Commit count: 0

cargo fmt