Packages
jsv
0.8.0
0.21.2
0.21.1
0.21.0
0.20.0
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.3
0.18.2
0.18.1
0.18.0
0.17.1
0.17.0
0.16.0
0.15.2
0.15.1
0.15.0
0.14.0
0.13.1
0.13.0
0.12.0
0.11.5
0.11.4
0.11.3
retired
0.11.2
0.11.1
0.11.0
0.10.1
0.10.0
0.9.0
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.0
0.5.1
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
A JSON Schema Validator with complete support for the latest specifications.
Current section
Files
Jump to
Current section
Files
lib/jsv/helpers/enum_ext.ex
defmodule JSV.Helpers.EnumExt do
@type result :: {:ok, term} | {:error, term}
@type result(t) :: {:ok, t} | {:error, term}
import Kernel, except: [trunc: 1]
@moduledoc false
@doc false
@spec reduce_ok(Enumerable.t(), term, (term, term -> result)) :: result
def reduce_ok(enum, initial, f) when is_function(f, 2) do
Enum.reduce_while(enum, {:ok, initial}, fn item, {:ok, acc} ->
case f.(item, acc) do
{:ok, new_acc} -> {:cont, {:ok, new_acc}}
{:error, _} = err -> {:halt, err}
other -> raise ArgumentError, "bad return from reduce_ok callback: #{inspect(other)}"
end
end)
end
end