defmodule Elsa.RetryConfig do
@moduledoc """
Simple struct for metadata request configuration, with function to provide defaults
"""
defstruct [
:tries,
:dwell_ms
]
@type t :: %__MODULE__{}
@doc """
Generate a struct from a keyword list with :tries and :dwell_ms.
Both keyword list entries are optional, and will be substituded with defaults if missing.
Default tries: 5
Default dwell_ms: 100
"""
@spec new(keyword()) :: t()
def new(config) when is_list(config) do
%__MODULE__{
tries: Keyword.get(config, :tries, 5),
dwell_ms: Keyword.get(config, :dwell_ms, 100)
}
end
@doc "Return a retry config that doesn't retry at all"
@spec no_retry() :: t()
def no_retry do
%__MODULE__{
tries: 1,
dwell_ms: 0
}
end
@doc "Decrement the tries field by 1"
@spec decrement(t()) :: t()
def decrement(%__MODULE__{tries: tries, dwell_ms: dwell_ms}) do
%__MODULE__{tries: tries - 1, dwell_ms: dwell_ms}
end
end