8 个版本 (4 个重大更新)

0.5.0 2023年3月15日
0.4.1 2023年3月15日
0.3.0 2022年6月9日
0.2.1 2022年3月31日
0.1.1 2022年3月27日

#7 in #rate-limit

每月下载 43

Apache-2.0/MIT

36KB
644 代码行数(不包括注释)

rate-limits

docs.rs

一个用于解析 HTTP 速率限制头的 crate,根据 IETF 草案。在不完美的基础上也支持类似 Github 速率限制头 的非官方实现。请参阅 供应商列表 了解支持情况。

use indoc::indoc;
use std::str::FromStr;
use time::{OffsetDateTime, Duration};
use rate_limits::{Vendor, RateLimit, ResetTime};

let headers = indoc! {"
    x-ratelimit-limit: 5000
    x-ratelimit-remaining: 4987
    x-ratelimit-reset: 1350085394
"};

assert_eq!(
    RateLimit::from_str(headers).unwrap(),
    RateLimit {
        limit: 5000,
        remaining: 4987,
        reset: ResetTime::DateTime(
            OffsetDateTime::from_unix_timestamp(1350085394).unwrap()
        ),
        window: Some(Duration::HOUR),
        vendor: Vendor::Github
    },
);

在计算重置时间时,也会考虑 Retry-After 头。

也支持 http::HeaderMap

use std::str::FromStr;
use time::{OffsetDateTime, Duration};
use rate_limits::{Vendor, RateLimit, ResetTime};
use http::header::HeaderMap;

let mut headers = HeaderMap::new();
headers.insert("X-RATELIMIT-LIMIT", "5000".parse().unwrap());
headers.insert("X-RATELIMIT-REMAINING", "4987".parse().unwrap());
headers.insert("X-RATELIMIT-RESET", "1350085394".parse().unwrap());

assert_eq!(
    RateLimit::new(headers).unwrap(),
    RateLimit {
        limit: 5000,
        remaining: 4987,
        reset: ResetTime::DateTime(
            OffsetDateTime::from_unix_timestamp(1350085394).unwrap()
        ),
        window: Some(Duration::HOUR),
        vendor: Vendor::Github
    },
);

其他资源

许可证:Apache-2.0/MIT

依赖项

~3MB
~61K SLoC