defmodule Fussy.Constructors do
alias Fussy.Validators
defdelegate integer(args \\ []), to: Validators.Integer, as: :new
def non_neg_integer(args \\ []) do
args
|> Keyword.merge(gte: 0)
|> integer()
end
def pos_integer(args \\ []) do
args
|> Keyword.merge(gte: 1)
|> integer()
end
defdelegate float(args \\ []), to: Validators.Float, as: :new
def non_neg_float(args \\ []) do
args
|> Keyword.merge(gte: 0.0)
|> float()
end
defdelegate string(args \\ []), to: Validators.String, as: :new
def non_empty_string(args \\ []) do
string(Keyword.merge(args, min_length: 1))
end
defdelegate optional(t), to: Validators.Optional, as: :new
defdelegate boolean(args \\ []), to: Validators.Boolean, as: :new
defdelegate list(t, args \\ []), to: Validators.List, as: :new
def non_empty_list(t, args \\ []) do
list(t, Keyword.merge(args, min_length: 1))
end
defdelegate either(variants), to: Validators.Either, as: :new
defdelegate literal(literal), to: Validators.Literal, as: :new
defdelegate atom(atom), to: Validators.Atom, as: :new
def enum(atoms) when is_list(atoms) do
atoms
|> Enum.map(&atom/1)
|> either()
end
defdelegate datetime(), to: Validators.DateTime, as: :new
defdelegate any(), to: Validators.Any, as: :new
defdelegate tuple(structure, args \\ []), to: Validators.Tuple, as: :new
def map({key, value}) do
Validators.Map.new(key, value)
end
defdelegate map(map, opts \\ []), to: Validators.FixedMap, as: :new
defdelegate default(t, default), to: Validators.Default, as: :new
end