Packages
jsv
0.9.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/codec/jason_codec.ex
# credo:disable-for-this-file Credo.Check.Readability.Specs
if Code.ensure_loaded?(Jason) do
defmodule JSV.Codec.JasonCodec do
alias JSV.Helpers.Traverse
@moduledoc false
def supports_formatting? do
true
end
def supports_ordered_formatting? do
true
end
def decode!(json) do
Jason.decode!(json)
end
def decode(json) do
Jason.decode(json)
end
def encode_to_iodata!(data) do
Jason.encode_to_iodata!(data)
end
def format_to_iodata!(data) do
Jason.encode_to_iodata!(data, pretty: true)
end
def to_ordered_data(data, key_sorter) do
Traverse.postwalk(data, fn
{:val, map} when is_map(map) ->
map
|> Map.to_list()
|> Enum.sort(fn {ka, _}, {kb, _} -> key_sorter.(ka, kb) end)
|> Jason.OrderedObject.new()
{:val, v} ->
v
{:key, k} ->
k
{:struct, struct, _cont} ->
raise ArgumentError, "ordered JSON encoding does not support structs, got: #{inspect(struct)}"
end)
end
end
defimpl Jason.Encoder, for: JSV.ValidationError do
def encode(err, opts) do
err
|> JSV.normalize_error()
|> Jason.Encoder.Map.encode(opts)
end
end
end