Packages
zoi
0.16.0
0.18.6
0.18.5
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.4
0.17.3
0.17.2
0.17.1
0.17.0
0.16.1
0.16.0
0.15.0
0.14.1
0.14.0
0.13.1
0.13.0
0.12.1
0.12.0
0.11.1
0.11.0
0.10.7
0.10.6
0.10.5
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.1
0.9.0
0.9.0-rc.1
0.9.0-rc.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.0
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.3
0.1.2
0.1.1
0.1.0
Zoi is a schema validation library for Elixir, designed to provide a simple and flexible way to define and validate data.
Current section
Files
Jump to
Current section
Files
lib/zoi/validations.ex
defmodule Zoi.Validations do
@moduledoc false
@type value :: any()
@type input :: any()
@type opts :: keyword()
@spec run_validations(list({module(), {value(), opts()} | nil}), Zoi.Type.t(), input()) ::
:ok | {:error, [Zoi.Error.t()]}
def run_validations(validations, schema, input) do
validations
|> Enum.reduce([], fn {module, constraint_value}, acc ->
case constraint_value do
nil ->
acc
{value, opts} ->
case module.validate(schema, input, value, opts) do
:ok -> acc
{:error, error} -> [error | acc]
end
end
end)
|> case do
[] -> :ok
errors -> {:error, Enum.reverse(errors)}
end
end
@spec maybe_set_validation(Zoi.Type.t(), module(), value()) :: Zoi.Type.t()
def maybe_set_validation(schema, _module, nil), do: schema
def maybe_set_validation(schema, module, {value, opts}) do
module.set(schema, value, opts)
end
def maybe_set_validation(schema, module, value) do
module.set(schema, value, [])
end
@spec unwrap_validation(value()) :: value()
def unwrap_validation(nil), do: nil
def unwrap_validation({value, _opts}), do: value
end