lib/ex_waiter/polling/invalid_result.ex

defmodule ExWaiter.Polling.InvalidResult do
  defexception [:message]

  @impl true
  def exception(result) do
    msg = """

    Expected:
    {:ok, value}, :ok, or true for success
    {:error, value}, :error, or false for failure

    Got:
    #{inspect(result)}

    Examples:

      Returning a tagged tuple ensures that the Project is returned
      from poll/1.

      poller = ExWaiter.new_poller(fn ->
        case Projects.get(1) do
          %Project{} = project -> {:ok, project}
          value -> {:error, value}
        end
      end)

      {:ok, poller} = ExWaiter.poll(poller)
      %Project{name: name} = poller.value
    """

    %__MODULE__{message: msg}
  end
end