Skip to main content

lib/kameleoon/internal/native_result.ex

defmodule Kameleoon.Internal.NativeResult do
  @moduledoc false

  alias Kameleoon.Error

  @spec ok(:ok | {:error, term()}) :: :ok | {:error, Error.t()}
  def ok(:ok), do: :ok
  def ok({:error, payload}), do: error(payload)

  @spec ref(:ok | {:error, term()}, reference()) :: {:ok, reference()} | {:error, Error.t()}
  def ref(:ok, ref), do: {:ok, ref}
  def ref({:error, payload}, _ref), do: error(payload)

  @spec result({:error, term()} | term()) :: {:ok, term()} | {:error, Error.t()}
  def result({:error, payload}), do: error(payload)
  def result(value), do: {:ok, value}

  @spec error(Error.t()) :: {:error, Error.t()}
  def error(%Error{} = error), do: {:error, error}
end