# RateFlow
A declarative, flexible, and high-performance rate limiting library for Rust.
## Features
- **Declarative API** - Configure complex rate limits with a simple, readable builder pattern
- **Custom Strategies** - Define different rate limits per endpoint, user tier, or client
- **Multiple Algorithms** - Token bucket and sliding window implementations
- **High Performance** - Optimized for low overhead in high-traffic scenarios
- **Flexible Identification** - Rate limit by IP address, API key, user ID, or custom identifiers
## Installation
Add to your `Cargo.toml`:
```toml
[dependencies]
rateflow = "0.1"
tokio = { version = "1", features = ["full"] }
```
## Quick Start
```rust
use rateflow::{RateLimiter, Window};
// Create a rate limiter with 100 requests per minute
let limiter = RateLimiter::builder()
.limit(100)
.window(Window::Minute)
.build()
.unwrap();
// Check if a request is allowed
let client_id = "user@example.com";
if limiter.check(client_id).await {
// Process request
} else {
// Reject request
}
```
## Multi-Tier Example
```rust
use rateflow::{RateLimiter, Window, Tier};
// Configure different limits for different user tiers
let limiter = RateLimiter::builder()
.add_tier(
Tier::new("free")
.limit(100)
.window(Window::Minute)
)
.add_tier(
Tier::new("premium")
.limit(1000)
.window(Window::Minute)
)
.build()
.unwrap();
// Check with tier information
if limiter.check_tier("free", "user@example.com").await {
// Process request
}
```
## License
Apache 2