Packages
jsv
0.11.5
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.ex
defmodule JSV.FormatValidator do
@moduledoc """
Behaviour for format validator implementations.
Such implementations must be given to `JSV.build/2` in the `:formats` option:
JSV.build!(raw_schema,
resolver: resolver,
formats: [MyModule | JSV.default_format_validator_modules()]
)
Each given module is interrogated for format support when a schema is built.
Modules earlier in the list take precedence and if a format is found in the
returned value of the `c:supported_formats/0` callback, the module is selected
for compilation and no other module will be tried.
A module can declare multiple formats.
"""
@type format :: String.t()
@doc """
Returns the list of the supported formats, as strings.
"""
@callback supported_formats :: [format]
@doc """
Returns `true` if the given format should be used for the input data type.
For instance, the `"date"` format will not be validated if the input data is
not a string.
No validation should be done in this callback, only the _type_ of the data
should be considered.
"""
@callback applies_to_type?(format, data :: term) :: boolean
@doc """
Receives the schema format as string, and the data.
Returns a result tuple with data optionally casted to a more meaningful data
structure (for instance returning a `Date` struct instead of the string
representation of the date).
"""
@callback validate_cast(format, data :: term) :: {:ok, term} | {:error, term}
end