lib/ex_waiter/exceptions/invalid_result.ex

defmodule ExWaiter.Exceptions.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 await!/2.

      %Project{name: name} = await!(fn ->
        case Projects.get(1) do
          %Project{} = project -> {:ok, project}
          value -> {:error, value}
        end
      end)

      If you only care about whether an exception is raised, any of
      :ok, :error, true, or false may be returned.

      await!(fn ->
        case Projects.get(1) do
          %Project{} -> :ok # or true
          _ -> :error # or false
        end
      end)
    """

    %__MODULE__{message: msg}
  end
end