Current section
Files
Jump to
Current section
Files
lib/result.ex
defmodule Pex.Result do
@moduledoc false
@spec ok(any, fun :: any) :: any
def ok({:error, _} = error, _fun), do: error
def ok(value, fun) when is_function(fun, 1) do
try do
fun.(unwrap(:ok, value))
rescue
exception -> {:error, exception}
catch
error -> {:error, error}
end
end
@spec error(any, fun:: any) :: any
def error({:error, error}, fun) do
try do
case fun.(unwrap(:error, error)) do
{:ok, value} -> value
{:error, value} -> value
value -> {:error, value}
end
rescue
exception -> {:error, exception}
catch
error -> {:error, error}
end
end
def error(value, _fun), do: value
@spec unwrap(:ok | :error, any) :: any
def unwrap(tag, value) do
case value do
{^tag, value} -> value
value -> value
end
end
end