View Source Xema.ValidationError exception (xema v0.17.4)

Raised when a validation fails.

Summary

Functions

This function returns an error message for an error or error tuple.

Traverse the error tree and invokes the given function.

Types

@type opts() :: [] | [{:path, path()}]
@type path() :: [atom() | integer() | String.t()]
@type t() :: %Xema.ValidationError{
  __exception__: true,
  message: String.t() | nil,
  reason: map()
}

Functions

@spec format_error({:error, error} | error) :: String.t() when error: map() | t()

This function returns an error message for an error or error tuple.

Example

iex> schema = Xema.new(:integer)
...> schema
...>   |> Xema.Validator.validate(1.1)
...>   |> Xema.ValidationError.format_error()
"Expected :integer, got 1.1."
iex> schema
...>   |> Xema.validate(1.1)
...>   |> Xema.ValidationError.format_error()
"Expected :integer, got 1.1."
Link to this function

travers_errors(error, acc, fun, opts \\ [])

View Source
@spec travers_errors(
  {:error, map()} | map(),
  acc,
  (map(), path(), acc -> acc),
  opts()
) :: acc
when acc: any()

Traverse the error tree and invokes the given function.

Example

iex> fun = fn _error, path, acc ->
...>   ["Error at " <> inspect(path) | acc]
...> end
iex>
iex> schema = Xema.new(
...>   properties: %{
...>     int: :integer,
...>     names: {:list, items: :string},
...>     num: [any_of: [:integer, :float]]
...>   }
...> )
iex>
iex> data = %{int: "x", names: [1, "x", 5], num: :foo}
iex>
iex> schema
...>   |> Xema.Validator.validate(data)
...>   |> Xema.ValidationError.travers_errors([], fun)
[
  "Error at [:num]",
  "Error at [:names, 2]",
  "Error at [:names, 0]",
  "Error at [:names]",
  "Error at [:int]",
  "Error at []"
]