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