Packages
jsv
0.6.2
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
alias JSV.Helpers.StringExt
@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.
"""
@uri_prefix "jsv:module:"
@impl true
def resolve(url, opts)
def resolve(@uri_prefix <> module_string, _) do
case StringExt.safe_string_to_existing_module(module_string) do
{:ok, module} -> {:ok, module.schema()}
{:error, reason} -> {:error, reason}
end
rescue
e -> {:error, {:invalid_schema_module, e}}
end
def resolve(other, _) do
{:error, {:unsupported, other}}
end
@doc """
Returns a JSV internal URI for the given module.
### Example
iex> module_to_uri(Inspect.Opts)
"jsv:module:Elixir.Inspect.Opts"
"""
@spec module_to_uri(module) :: binary
def module_to_uri(module) when is_atom(module) do
@uri_prefix <> Atom.to_string(module)
end
end