Packages
jsv
0.4.0
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/resolver/internal.ex
defmodule JSV.Resolver.Internal do
@behaviour JSV.Resolver
@moduledoc """
A `JSV.Resolver` implementation that resolves URIs pointing to the application
code base or JSV code base.
A custom resolver implementation should delegate `jsv:` prefixed URIs to this
module to enable support of the internal resolutions features.
### Module based schemas
This resolver will resolve `jsv:module:MODULE` URIs where `MODULE` is a string
representation of an Elixir module. Modules pointed at with such references
MUST export a `schema/0` function that returns a normalized (with binary keys
and values) JSON schema.
"""
alias JSV.AtomTools
@impl true
def resolve(url, opts)
def resolve("jsv:module:" <> module_string, _) do
case cast_to_existing_atom(module_string) do
{:ok, module} -> {:ok, AtomTools.deatomize(module.schema())}
{:error, reason} -> {:error, {:invalid_schema_module, reason}}
end
rescue
e -> {:error, {:invalid_schema_module, Exception.message(e)}}
end
defp cast_to_existing_atom(module_string) do
{:ok, String.to_existing_atom(module_string)}
rescue
_ -> {:error, "not an existing atom: #{module_string}"}
end
end