Packages
zoi
0.2.1
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/refinements.ex
defmodule Zoi.Refinements do
@moduledoc false
def refine(%Zoi.Types.String{}, input, [min: min], _opts) do
if String.length(input) >= min do
:ok
else
{:error, "minimum length is #{min}"}
end
end
def refine(%Zoi.Types.Integer{}, input, [min: min], _opts) do
if input >= min do
:ok
else
{:error, "minimum value is #{min}"}
end
end
def refine(%Zoi.Types.Float{}, input, [min: min], _opts) do
if input >= min do
:ok
else
{:error, "minimum value is #{min}"}
end
end
def refine(%Zoi.Types.Array{}, input, [min: min], _opts) do
if length(input) >= min do
:ok
else
{:error, "minimum array length is #{min}"}
end
end
def refine(%Zoi.Types.String{}, input, [max: max], _opts) do
if String.length(input) <= max do
:ok
else
{:error, "maximum length is #{max}"}
end
end
def refine(%Zoi.Types.Integer{}, input, [max: max], _opts) do
if input <= max do
:ok
else
{:error, "maximum value is #{max}"}
end
end
def refine(%Zoi.Types.Float{}, input, [max: max], _opts) do
if input <= max do
:ok
else
{:error, "maximum value is #{max}"}
end
end
def refine(%Zoi.Types.Array{}, input, [max: max], _opts) do
if length(input) <= max do
:ok
else
{:error, "maximum length is #{max}"}
end
end
def refine(%Zoi.Types.String{}, input, [length: length], _opts) do
if String.length(input) == length do
:ok
else
{:error, "length must be #{length}"}
end
end
def refine(%Zoi.Types.Array{}, input, [length: length], _opts) do
if length(input) == length do
:ok
else
{:error, "length must be #{length}"}
end
end
def refine(%Zoi.Types.String{}, input, [regex: regex], opts) do
message = Keyword.get(opts, :message, "regex does not match")
if String.match?(input, regex) do
:ok
else
{:error, message}
end
end
def refine(%Zoi.Types.String{}, input, [starts_with: prefix], _opts) do
if String.starts_with?(input, prefix) do
:ok
else
{:error, "must start with '#{prefix}'"}
end
end
def refine(%Zoi.Types.String{}, input, [ends_with: suffix], _opts) do
if String.ends_with?(input, suffix) do
:ok
else
{:error, "must end with '#{suffix}'"}
end
end
def refine(_schema, _input, _args, _opts) do
# Default to :ok if there is no type pattern match
:ok
end
end