Packages
jsv
0.8.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/format_validator/default/optional/uri.ex
require JSV.FormatValidator.Default.Optional
if Code.ensure_loaded?(AbnfParsec) do
defmodule JSV.FormatValidator.Default.Optional.URI do
@moduledoc false
@external_resource "priv/grammars/uri.abnf"
use AbnfParsec,
abnf_file: "priv/grammars/uri.abnf",
unbox: [],
ignore: []
@doc false
@spec parse_uri(binary) :: {:ok, URI.t()} | {:error, term}
def parse_uri(data) do
case uri(data) do
{:ok, _, "", _, _, _} -> {:ok, URI.parse(data)}
_ -> {:error, :invalid_URI}
end
end
@doc false
@spec parse_uri_reference(binary) :: {:ok, URI.t()} | {:error, term}
def parse_uri_reference(data) do
case uri_reference(data) do
{:ok, _, "", _, _, _} -> {:ok, URI.parse(data)}
_ -> {:error, :invalid_URI_reference}
end
end
end
else
defmodule JSV.FormatValidator.Default.Optional.URI do
@moduledoc false
@doc false
@spec parse_uri(binary) :: {:ok, URI.t()} | {:error, term}
def parse_uri(data) do
case URI.parse(data) do
%{scheme: nil} -> {:error, :no_uri_scheme}
%{host: nil} -> {:error, :no_uri_host}
uri -> {:ok, uri}
end
end
@doc false
@spec parse_uri_reference(binary) :: {:ok, URI.t()} | {:error, term}
def parse_uri_reference(data) do
case URI.parse(data) do
%{host: nil, path: path, fragment: frag, query: q} = uri
when is_binary(path)
when is_binary(frag)
when is_binary(q) ->
{:ok, uri}
%{host: "", path: path, fragment: frag, query: q} = uri
when is_binary(path)
when is_binary(frag)
when is_binary(q) ->
{:ok, uri}
%{host: nil} ->
{:error, :no_uri_host}
%{host: ""} ->
{:error, :no_uri_host}
uri ->
{:ok, uri}
end
end
end
end