Thank you for your comment. I used Ecto.Changeset before and there are some reason why I build another one:
- Some simple project or library, using Ecto is overkill
- I need a simple and clean way.
Changesetneet much code to do the same thing
Using Ecto.Changeset
types = %{a: :integer}
data = %{a: "hello"}
default = %{}
changeset =
{default, types}
|> Ecto.Changeset.cast(data, Map.keys(types))
|> Ecto.Changeset.validate_required([:a])
|> Ecto.Changeset.validate_number(greater_than: 5)
Using Valdi
data_spec = %{a: [type: :integer, required: true, number: [greater_than: 5]}
Valdi.validate(%{a: "hello"}, data_spec)
I have tried wrapping Ecto before but I have to do some hack to support nested and dynamic default value






















