defmodule GitHub.RateLimit do
@moduledoc """
Provides API endpoint, struct, and type related to rate limit
"""
@default_client GitHub.Client
@type t :: %__MODULE__{limit: integer, remaining: integer, reset: integer, used: integer}
defstruct [:limit, :remaining, :reset, :used]
@doc false
@spec __fields__(atom) :: keyword
def __fields__(type \\ :t)
def __fields__(:t) do
[limit: :integer, remaining: :integer, reset: :integer, used: :integer]
end
@doc """
Get rate limit status for the authenticated user
## Resources
* [API method documentation](https://docs.github.com/rest/reference/rate-limit#get-rate-limit-status-for-the-authenticated-user)
"""
@spec get(keyword) :: {:ok, GitHub.RateLimit.Overview.t()} | {:error, GitHub.Error.t()}
def get(opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
call: {GitHub.RateLimit, :get},
url: "/rate_limit",
method: :get,
response: [
{200, {GitHub.RateLimit.Overview, :t}},
{304, nil},
{404, {GitHub.BasicError, :t}}
],
opts: opts
})
end
end