Current section

Files

Jump to
enux lib json.ex
Raw

lib/json.ex

defmodule Enux.Json do
@moduledoc false
import Enux.Utils
@doc """
decodes the json passed to it by `Enux.load` and format it into a keyword list
"""
def decode(content, opts) do
decode = get_decode_function()
decoded = decode.(content)
cond do
is_map(decoded) -> decoded |> map_to_keyword_list(opts)
true -> decoded
end
end
defp get_decode_function do
cond do
is_list(Application.spec(:jason)) ->
&Jason.decode!/1
is_list(Application.spec(:poison)) ->
&Poison.decode!/1
is_list(Application.spec(:jaxon)) ->
&Jaxon.decode!/1
is_list(Application.spec(:json)) ->
&JSON.decode!/1
is_list(Application.spec(:jsone)) ->
&:jsone.decode/1
is_list(Application.spec(:jiffy)) ->
decode = &:jiffy.decode/2
fn input ->
decode.(input, [:return_maps, :use_nil, :copy_strings])
end
is_list(Application.spec(:thoas)) ->
decode = &:thoas.decode/1
fn input ->
case decode.(input) do
{:ok, output} ->
output
{:error, error} ->
case is_tuple(error) do
true -> raise error |> elem(0) |> to_string()
false -> raise error |> to_string()
end
end
end
is_list(Application.spec(:jsonc)) ->
&JSONC.decode!/1
true ->
raise "No json decoder found"
end
end
end