lib/ex_waiter/rate_limiting/limiter.ex

defmodule ExWaiter.RateLimiting.Limiter do
  @type timestamp_in_ms :: pos_integer()

  defstruct [
    :refill_rate,
    :interval,
    :burst_limit,
    :cost,
    :checked_at,
    :created_at,
    :previous_updated_at,
    :updated_at,
    :next_refill_at,
    :ms_until_next_refill,
    :previous_tokens,
    :refilled_tokens,
    :tokens_after_refill,
    :paid_tokens,
    :tokens_after_paid
  ]

  @type t :: %__MODULE__{
          refill_rate: pos_integer(),
          interval: pos_integer(),
          burst_limit: pos_integer(),
          cost: pos_integer(),
          checked_at: timestamp_in_ms(),
          created_at: timestamp_in_ms() | nil,
          previous_updated_at: timestamp_in_ms() | nil,
          updated_at: timestamp_in_ms(),
          next_refill_at: timestamp_in_ms(),
          ms_until_next_refill: non_neg_integer(),
          previous_tokens: non_neg_integer() | nil,
          refilled_tokens: non_neg_integer(),
          tokens_after_refill: non_neg_integer(),
          paid_tokens: non_neg_integer(),
          tokens_after_paid: non_neg_integer()
        }
end