Current section
Files
Jump to
Current section
Files
lib/cqrs/command/form.ex
defmodule Cqrs.Command.Form do
defmacro __using__(_opts) do
quote do
use Vex.Struct
use ExConstructor
import Vex, only: [valid?: 1]
def errors(form) do
map = Map.keys(form) |> Enum.filter(&(&1 != :__struct__)) |> Enum.map(&({&1, []})) |> Enum.into(%{})
results = form |> Vex.results(Vex.Extract.settings(form))
{_, map} = Enum.map_reduce(results, map, fn(x, acc) -> {nil, %{acc | elem(x, 1) => add_error(acc[elem(x,1)], x)}} end)
map
end
defp add_error(field_errors, {:ok, _, _}) do
field_errors
end
defp add_error(field_errors, {:error, field, _, error}) when is_bitstring(error) do
[error | field_errors]
end
defp add_error(field_errors, {:error, field, _, error}) do
[convert_vars(Enum.into(error, %{})) | field_errors]
end
defp convert_vars(error_map) do
%{ error_map | :vars => Enum.into(error_map[:vars], %{}) }
end
end
end
end