Current section
Files
Jump to
Current section
Files
lib/instream/connection/json.ex
defmodule Instream.Connection.JSON do
@moduledoc false
@doc """
Decodes a JSON value.
"""
@spec decode(term, module) :: term
def decode(value, conn) do
{json_mod, json_fun, json_extra_args} = decoder(conn)
apply(json_mod, json_fun, [value | json_extra_args])
end
@doc """
Encodes a value to JSON.
"""
@spec encode(term, module) :: term
def encode(value, conn) do
{json_mod, json_fun, json_extra_args} = encoder(conn)
apply(json_mod, json_fun, [value | json_extra_args])
end
defp decoder(conn) do
:json_decoder
|> conn.config()
|> convert_to_mfargs(:decode!)
end
defp encoder(conn) do
:json_encoder
|> conn.config()
|> convert_to_mfargs(:encode!)
end
defp convert_to_mfargs({_, _, _} = mfargs, _), do: mfargs
defp convert_to_mfargs({module, function}, _), do: {module, function, []}
defp convert_to_mfargs(module, function), do: {module, function, []}
end