minisome/lib/utils/with_helper.ex

19 lines
631 B
Elixir
Raw Normal View History

2022-02-13 11:38:25 +00:00
defmodule Minisome.Utils.WithHelper do
@spec op(atom(), any(), :strict | :permissive) :: any()
def op(label, thing, mode \\ :strict) do
if mode == :permissive do
opt_permissive(label, thing)
else
op_strict(label, thing)
end
end
defp opt_permissive(label, err) when err in [:error, false, nil], do: {label, err}
defp opt_permissive(label, {:error, _} = err), do: {label, err}
defp opt_permissive(_label, val), do: val
defp op_strict(_label, val) when val in [:ok, true], do: val
defp op_strict(_label, {:ok, _} = success), do: success
defp op_strict(label, other), do: {label, other}
end