Crates.io | rate-limits |
lib.rs | rate-limits |
version | 0.5.0 |
source | src |
created_at | 2022-03-27 00:19:52.626951 |
updated_at | 2023-03-15 20:26:15.194782 |
description | A parser for HTTP rate limit headers |
homepage | https://github.com/mre/rate-limits |
repository | https://github.com/mre/rate-limits |
max_upload_size | |
id | 557064 |
size | 37,405 |
A crate for parsing HTTP rate limit headers as per the IETF draft. Inofficial implementations like the Github rate limit headers are also supported on a best effort basis. See vendor list for support.
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
},
);
Also takes the Retry-After
header into account when calculating the reset
time.
http::HeaderMap is supported as well:
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
},
);
License: Apache-2.0/MIT