Packages
jsv
0.21.1
0.21.2
0.21.1
0.21.0
0.20.0
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.3
0.18.2
0.18.1
0.18.0
0.17.1
0.17.0
0.16.0
0.15.2
0.15.1
0.15.0
0.14.0
0.13.1
0.13.0
0.12.0
0.11.5
0.11.4
0.11.3
retired
0.11.2
0.11.1
0.11.0
0.10.1
0.10.0
0.9.0
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.0
0.5.1
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
A JSON Schema Validator with complete support for the latest specifications.
Current section
Files
Jump to
Current section
Files
lib/jsv/build_error.ex
defmodule JSV.BuildError do
@moduledoc """
A simple wrapper for errors returned from `JSV.build/2`.
"""
@inspect_limit 20
@enforce_keys [:reason, :action, :build_path]
defexception @enforce_keys
@doc """
Wraps the given term as the `reason` in a `#{inspect(__MODULE__)}` struct.
The `action` should be a `{module, function, [arg1, arg2, ..., argN]}` tuple or
a mfa tuple whenever possible.
"""
@spec of(term, term, build_path :: nil | String.t()) :: Exception.t()
def of(reason, action, build_path \\ nil) do
%__MODULE__{reason: reason, action: action, build_path: build_path}
end
@impl true
def message(%{action: {m, f, a}} = e) when is_atom(m) and is_atom(f) and (is_list(a) or is_integer(a)) do
"could not build JSON schema at #{e.build_path} " <>
"with #{Exception.format_mfa(m, f, a)}, " <> "#{format_reason(e.reason, {m, f, a})}"
end
def message(e) do
"could not build JSON schema at #{e.build_path}, " <> "#{format_reason(e.reason, e.action)}"
end
defp format_reason({:invalid_ns_merge, ns, relative}, {JSV.Ref, _, _}) when is_binary(relative) do
"cannot resolve the relative reference #{inspect(relative)} against base #{inspect(ns)}"
end
defp format_reason({:invalid_id_fragment, id}, _) do
"invalid $id #{inspect(id)}, an $id must be a URI with no fragment or a bare " <>
"plain-name anchor such as \"#name\""
end
defp format_reason({:invalid_id, id}, _) do
"invalid $id, expected a string, got: #{inspect(id)}"
end
defp format_reason({:invalid_ref, ref}, _) do
"invalid reference, expected a string, got: #{inspect(ref)}"
end
defp format_reason({:invalid_anchor, keyword, anchor}, _) do
"invalid #{keyword}, expected a string, got: #{inspect(anchor)}"
end
defp format_reason(:mixed_casts, _) do
"using both jsv-cast and x-jsv-cast on the same schema is not supported"
end
defp format_reason(reason, _action) do
inspect(reason, pretty: true, limit: @inspect_limit)
end
end