eternity

Crates.ioeternity
lib.rseternity
version0.1.0
sourcesrc
created_at2021-03-29 07:29:37.961441
updated_at2021-03-29 07:29:37.961441
descriptionA Rust library to limit requests and cache results.
homepagehttps://github.com/Lakelezz/eternity
repositoryhttps://github.com/Lakelezz/eternity.git
max_upload_size
id375022
size59,356
(Lakelezz)

documentation

https://docs.rs/eternity

README

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:

use eternity::{Bucket, BucketBuilder};
use eternity::multi_bucket::{CachedLimitedEnums, ToBucket};

#[derive(Hash, PartialEq, Clone, Eq)]
enum Route {
    GetUser(u64),
    GetStats,
    GetGuild(u64),
}

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

#[tokio::main]
async fn main() {
    let mut limiter: CachedLimitedEnums<Route, String> = CachedLimitedEnums::new();

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

async fn get_user(user_id: u64) -> Option<String> {
    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.

  • cache: Enables functionality to cache values.
  • tokio_0_2: By default this crate supports tokio v1, this feature enables v0.2 support.

Installation

Add the following to your Cargo.toml file:

[dependencies]
eternity = "0.1"

Eternity supports a minimum of Rust 1.48.

Commit count: 8

cargo fmt