Packages

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

Current section

Files

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

src/jackson@internal@encoder.erl

-module(jackson@internal@encoder).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([dynamic_to_json/1, to_string_builder/1, to_string/1]).
-spec dynamic_to_json(gleam@dynamic:dynamic_()) -> {ok,
jackson@internal@json:json()} |
{error, list(gleam@dynamic:decode_error())}.
dynamic_to_json(Dyn) ->
(gleam@dynamic:any([fun(Dyn@1) -> _pipe = gleam@dynamic:int(Dyn@1),
gleam@result:map(_pipe, fun(Field@0) -> {integer, Field@0} end) end, fun(
Dyn@2
) ->
_pipe@1 = gleam@dynamic:float(Dyn@2),
gleam@result:map(_pipe@1, fun(Field@0) -> {float, Field@0} end)
end, fun(Dyn@3) -> _pipe@2 = gleam@dynamic:string(Dyn@3),
gleam@result:map(_pipe@2, fun(Field@0) -> {string, Field@0} end) end, fun(
Dyn@4
) ->
_pipe@3 = gleam@dynamic:bool(Dyn@4),
gleam@result:map(_pipe@3, fun(Field@0) -> {bool, Field@0} end)
end, fun(Dyn@5) ->
_pipe@4 = (gleam@dynamic:optional(fun(_) -> {error, []} end))(
Dyn@5
),
gleam@result:map(_pipe@4, fun(_) -> null end)
end, fun(Dyn@6) ->
_pipe@5 = (gleam@dynamic:list(
gleam@dynamic:tuple2(
fun gleam@dynamic:string/1,
fun dynamic_to_json/1
)
))(Dyn@6),
gleam@result:map(_pipe@5, fun(Field@0) -> {object, Field@0} end)
end, fun(Dyn@7) ->
_pipe@6 = (gleam@dynamic:list(fun dynamic_to_json/1))(Dyn@7),
gleam@result:map(_pipe@6, fun(Field@0) -> {array, Field@0} end)
end]))(Dyn).
-spec to_string_builder(jackson@internal@json:json()) -> gleam@string_builder:string_builder().
to_string_builder(Json) ->
case Json of
null ->
gleam@string_builder:from_string(<<"null"/utf8>>);
{float, Inner} ->
_pipe = gleam@float:to_string(Inner),
gleam@string_builder:from_string(_pipe);
{integer, Inner@1} ->
_pipe@1 = gleam@int:to_string(Inner@1),
gleam@string_builder:from_string(_pipe@1);
{bool, true} ->
gleam@string_builder:from_string(<<"true"/utf8>>);
{bool, false} ->
gleam@string_builder:from_string(<<"false"/utf8>>);
{string, Inner@2} ->
_pipe@2 = gleam@string_builder:from_string(
jackson@internal@escaping:escape_string(Inner@2)
),
_pipe@3 = gleam@string_builder:prepend(_pipe@2, <<"\""/utf8>>),
gleam@string_builder:append(_pipe@3, <<"\""/utf8>>);
{array, Entries} ->
_pipe@4 = gleam@list:map(Entries, fun to_string_builder/1),
_pipe@7 = gleam@list:index_fold(
_pipe@4,
gleam@string_builder:new(),
fun(Acc, Builder, Idx) ->
Term_prepend = case Idx of
0 ->
<<""/utf8>>;
_ ->
<<","/utf8>>
end,
_pipe@5 = Acc,
_pipe@6 = gleam@string_builder:append(_pipe@5, Term_prepend),
gleam@string_builder:append_builder(_pipe@6, Builder)
end
),
_pipe@8 = gleam@string_builder:prepend(_pipe@7, <<"["/utf8>>),
gleam@string_builder:append(_pipe@8, <<"]"/utf8>>);
{object, Entries@1} ->
_pipe@11 = gleam@list:map(
Entries@1,
fun(Entry) ->
_pipe@9 = to_string_builder(
{string, erlang:element(1, Entry)}
),
_pipe@10 = gleam@string_builder:append(
_pipe@9,
<<":"/utf8>>
),
gleam@string_builder:append_builder(
_pipe@10,
to_string_builder(erlang:element(2, Entry))
)
end
),
_pipe@14 = gleam@list:index_fold(
_pipe@11,
gleam@string_builder:new(),
fun(Acc@1, Builder@1, Idx@1) ->
Term_prepend@1 = case Idx@1 of
0 ->
<<""/utf8>>;
_ ->
<<","/utf8>>
end,
_pipe@12 = Acc@1,
_pipe@13 = gleam@string_builder:append(
_pipe@12,
Term_prepend@1
),
gleam@string_builder:append_builder(_pipe@13, Builder@1)
end
),
_pipe@15 = gleam@string_builder:prepend(_pipe@14, <<"{"/utf8>>),
gleam@string_builder:append(_pipe@15, <<"}"/utf8>>)
end.
-spec to_string(jackson@internal@json:json()) -> binary().
to_string(Json) ->
_pipe = to_string_builder(Json),
gleam@string_builder:to_string(_pipe).