upstash-ratelimit 0.1.0

Upstash ratelimit compatible rate limiting library.
Documentation
# Redis Backed Rate Limit

This library is inspired by and designed to be compatible with the [Upstash Rate Limit](https://github.com/upstash/ratelimit) library. This means you can have multiple JavaScript and Rust services operate on the same Redis keys and use the same rate limiting algorithms.

## Getting Started

Add the dependency

```shell
cargo add upstash-ratelimit
```

Use upstash_ratelimit to

```rust
use upstash_ratelimit::{Limiter, RateLimit, Response};

let redis = redis::Client::open("redis://127.0.0.1/")?;

let ratelimit = RateLimit::builder()
    .redis(REDIS.clone())
    .limiter(Limiter::FixedWindow {
        tokens: 30,
        window: Duration::from_millis(100),
    })
    .build()?;

let response = ratelimit.limit("unique-id");

match result {
    Response::Success { .. } => println!("Allow!")
    Response::Failure { .. } => println!("Rate limited!")
}
```

## Running Unit Tests

Before running `cargo test`, spin up a Redis instance on `localhost` with `docker-compose up -d`. It's a good idea to restart Redis between test runs.

## Feature Support

- [x] Single region Redis
- [ ] Multi-region Redis
- [x] Fixed window limiting
- [ ] Sliding window limiting
- [ ] Token bucket limiting
- [ ] Cached fixed window limiting
- [x] Arbitrary key prefix
- [ ] Ephemeral (in-memory) cache
- [ ] Block until ready
- [ ] HTTP Redis connection
    - This will require substantial effort and should probably reside in a separate library.
- [ ] Analytics
    - This will require substantial efford and should probably reside in a separate library.