Packages

A pure gleam json decoder, encoder, and json pointer resolver

Current section

Files

Jump to
jackson src jackson@internal@decoder.erl
Raw

src/jackson@internal@decoder.erl

-module(jackson@internal@decoder).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([decode/2]).
-spec json_to_dynamic(jackson@internal@json:json()) -> gleam@dynamic:dynamic_().
json_to_dynamic(Json) ->
case Json of
{float, Inner} ->
gleam@dynamic:from(Inner);
{integer, Inner@1} ->
gleam@dynamic:from(Inner@1);
{bool, Inner@2} ->
gleam@dynamic:from(Inner@2);
null ->
gleam@dynamic:from(nil);
{string, Inner@3} ->
gleam@dynamic:from(Inner@3);
{array, Inner@4} ->
gleam@dynamic:from(gleam@list:map(Inner@4, fun json_to_dynamic/1));
{object, Entries} ->
gleam@dynamic:from(
gleam@list:map(
Entries,
fun(Entry) ->
gleam@dynamic:from(
{erlang:element(1, Entry),
json_to_dynamic(erlang:element(2, Entry))}
)
end
)
)
end.
-spec decode(
jackson@internal@json:json(),
fun((gleam@dynamic:dynamic_()) -> {ok, FQX} |
{error, list(gleam@dynamic:decode_error())})
) -> {ok, FQX} | {error, list(gleam@dynamic:decode_error())}.
decode(Json, Decoder) ->
To_decode = json_to_dynamic(Json),
Decoder(To_decode).