ci-badge docs-badge ![crates.io version] ![rust 1.48.0+ badge]

Eternity

Eternity is a Rust library to rate limit and optionally cache keyed results.

Two use cases: - You interact with a REST-API lacking official rate limits and you want to cache frequent requests. - You have a bot with commands and you want to ratelimit them per user or even globally.

View the [examples] on how to use this library for these cases.

Example

A basic limiter for endpoints:

```rust,norun use eternity::{Bucket, BucketBuilder}; use eternity::multibucket::{CachedLimitedEnums, ToBucket};

[derive(Hash, PartialEq, Clone, Eq)]

enum Route { GetUser(u64), GetStats, GetGuild(u64), }

impl ToBucket for Route { fn tobucket(&self) -> Option> { match self { Self::GetUser() => Some(BucketBuilder::new() .limit(4) .time_span(10) .build()), _ => None, } } }

[tokio::main]

async fn main() { let mut limiter: CachedLimitedEnums = CachedLimitedEnums::new();

let result = limiter.cache_or(&Route::GetUser(1), get_user(1));

}

async fn getuser(userid: u64) -> Option { Some(format!("eternity-{}", user_id)) }

```

All Examples

Here are [examples] to see what this library can be used for.

Features

There are two features and they are not enabled by default.

Installation

Add the following to your Cargo.toml file:

toml [dependencies] eternity = "0.1"

Eternity supports a minimum of Rust 1.48.