rate-limits

docs.rs

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 }, ); ```

Other resources:

License: Apache-2.0/MIT