Packages
enux
1.3.0
1.6.0
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.4.2
1.4.1
1.4.0
1.3.3
1.3.2
1.3.1
1.3.0
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.3
1.1.2
1.1.1
1.1.0
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.9.19
0.9.18
0.9.17
0.9.16
0.9.15
0.9.14
0.9.13
0.9.12
0.9.11
0.9.10
0.9.9
0.9.8
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.1
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
utility package for loading, validating and documenting your app's configuration variables from env, json, jsonc and toml files at runtime and injecting them into your environment
Current section
Files
Jump to
Current section
Files
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