Current section
Files
Jump to
Current section
Files
lib/exonerate/type/null.ex
defmodule Exonerate.Type.Null do
@moduledoc false
@behaviour Exonerate.Type
alias Exonerate.Combining
alias Exonerate.Tools
@filters Combining.filters()
defmacro filter(resource, pointer, opts) do
__CALLER__
|> Tools.subschema(resource, pointer)
|> build_filter(resource, pointer, opts)
|> Tools.maybe_dump(__CALLER__, opts)
end
defp build_filter(context, resource, pointer, opts) do
filter_clauses =
for filter <- @filters, is_map_key(context, filter) do
filter_call = Tools.call(resource, JsonPtr.join(pointer, Combining.adjust(filter)), opts)
quote do
:ok <- unquote(filter_call)(null, path)
end
end
quote do
defp unquote(Tools.call(resource, pointer, opts))(null, path)
when is_nil(null) do
with unquote_splicing(filter_clauses) do
:ok
end
end
end
end
defmacro accessories(_, _, _), do: []
end