#rate-limiting #cache #async #date-time #data-structures

eternity

A Rust 库,用于限制请求和缓存结果

1 个不稳定版本

0.1.0 2021 年 3 月 29 日

#258 in 缓存

ISC 许可证

46KB
686 代码行

ci-badge docs-badge crates.io version rust 1.48.0+ badge

Eternity

Eternity 是一个 Rust 库,用于限制速率并可选地缓存键值结果。

两种用例

  • 你与一个缺乏官方速率限制的 REST-API 交互,并希望缓存频繁请求。
  • 你有一个具有命令的机器人,并希望按用户或全局进行速率限制。

查看示例,了解如何使用此库处理这些情况。

示例

端点的基本限制器

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))
}

所有示例

以下是一些示例,展示了此库的用途。

功能

有两个功能,默认情况下不启用。

  • cache:启用缓存值的功能。
  • tokio_0_2:默认情况下,此 crate 支持 tokio v1,此功能启用 v0.2 支持。

安装

将以下内容添加到你的 Cargo.toml 文件中

[dependencies]
eternity = "0.1"

Eternity 至少支持 Rust 1.48。

依赖项

~2.2–4.5MB
~68K SLoC