lib/ex_waiter/polling/poller/config.ex

defmodule ExWaiter.Polling.Poller.Config do
  @type polling_result :: :ok | :error | {:ok, any()} | {:error, any()} | boolean()
  @type polling_fn :: (__MODULE__.t() -> polling_result()) | (() -> polling_result())
  @type delay ::
          (__MODULE__.t() -> non_neg_integer()) | (() -> non_neg_integer()) | non_neg_integer()
  @type max_attempts ::
          non_neg_integer() | :infinity | (__MODULE__.t() -> boolean()) | (() -> boolean())

  defstruct [
    :polling_fn,
    :delay,
    :max_attempts,
    record_history: false
  ]

  @type t :: %__MODULE__{
          polling_fn: polling_fn(),
          delay: delay(),
          max_attempts: max_attempts(),
          record_history: boolean()
        }
end