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.
```rust 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 "};
asserteq!( RateLimit::fromstr(headers).unwrap(), RateLimit { limit: 5000, remaining: 4987, reset: ResetTime::DateTime( OffsetDateTime::fromunixtimestamp(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:
```rust 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());
asserteq!( RateLimit::new(headers).unwrap(), RateLimit { limit: 5000, remaining: 4987, reset: ResetTime::DateTime( OffsetDateTime::fromunix_timestamp(1350085394).unwrap() ), window: Some(Duration::HOUR), vendor: Vendor::Github }, ); ```
License: Apache-2.0/MIT