# `HTTPower.RateLimitHeaders`
[🔗](https://github.com/mdepolli/httpower/blob/v0.22.0/lib/httpower/rate_limit_headers.ex#L1)

Parses rate limit headers from HTTP responses.

Supports multiple common formats:
- GitHub/Twitter style: X-RateLimit-*
- RFC 6585/IETF: RateLimit-*
- Retry-After header (on 429/503 responses)
- Stripe style: X-Stripe-RateLimit-*

## Example

    iex> headers = %{
    ...>   "x-ratelimit-limit" => "60",
    ...>   "x-ratelimit-remaining" => "55",
    ...>   "x-ratelimit-reset" => "1234567890"
    ...> }
    iex> HTTPower.RateLimitHeaders.parse(headers)
    {:ok, %{
      limit: 60,
      remaining: 55,
      reset_at: ~U[2009-02-13 23:31:30Z],
      format: :github
    }}

# `header_format`

```elixir
@type header_format() :: :auto | :github | :rfc | :stripe | :retry_after
```

# `rate_limit_info`

```elixir
@type rate_limit_info() :: %{
  limit: pos_integer(),
  remaining: non_neg_integer(),
  reset_at: DateTime.t(),
  format: atom()
}
```

# `parse`

```elixir
@spec parse(
  map(),
  keyword()
) :: {:ok, rate_limit_info()} | {:error, :not_found}
```

Parse rate limit headers from an HTTP response.

Returns `{:ok, rate_limit_info}` if headers are found, `{:error, :not_found}` otherwise.

## Options

- `:format` - Specify header format to look for (`:auto`, `:github`, `:rfc`, `:stripe`)

# `parse_retry_after`

```elixir
@spec parse_retry_after(map()) :: {:ok, non_neg_integer()} | {:error, :not_found}
```

Parse Retry-After header from 429/503 responses.

Returns seconds until retry is allowed.

## Examples

    iex> HTTPower.RateLimitHeaders.parse_retry_after(%{"retry-after" => "120"})
    {:ok, 120}

    iex> HTTPower.RateLimitHeaders.parse_retry_after(%{"retry-after" => "Wed, 21 Oct 2015 07:28:00 GMT"})
    {:ok, seconds_until_that_time}

---

*Consult [api-reference.md](api-reference.md) for complete listing*
