Current section
Files
Jump to
Current section
Files
src/touch_grass@decode_json.erl
-module(touch_grass@decode_json).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/touch_grass/decode_json.gleam").
-export([encode/1, sync/1]).
-file("src/touch_grass/decode_json.gleam", 10).
-spec encode({ok, list({julienne:term_(), integer()})} | {error, binary()}) -> eyg@interpreter@value:value(any(), any()).
encode(Result) ->
case Result of
{ok, Parsed} ->
List = {linked_list,
gleam@list:map(
Parsed,
fun(Item) ->
{Term, Depth} = Item,
Term@1 = case Term of
{boolean, true} ->
eyg@interpreter@value:true();
{boolean, false} ->
eyg@interpreter@value:false();
null ->
{tagged,
<<"Null"/utf8>>,
eyg@interpreter@value:unit()};
{string, Value} ->
{tagged, <<"String"/utf8>>, {string, Value}};
{integer, I} ->
{tagged, <<"Integer"/utf8>>, {integer, I}};
{number, Sign, Integer, Decimal, Exponent} ->
{tagged,
<<"Number"/utf8>>,
{record,
maps:from_list(
[{<<"sign"/utf8>>, case Sign of
positive ->
{tagged,
<<"Positive"/utf8>>,
eyg@interpreter@value:unit(
)};
negative ->
{tagged,
<<"Negative"/utf8>>,
eyg@interpreter@value:unit(
)}
end}, {<<"integer"/utf8>>,
{integer, Integer}}, {<<"decimal"/utf8>>,
{record,
maps:from_list(
[{<<"numerator"/utf8>>,
{integer,
erlang:element(
1,
Decimal
)}},
{<<"size"/utf8>>,
{integer,
erlang:element(
2,
Decimal
)}}]
)}}, {<<"exponent"/utf8>>,
{integer, Exponent}}]
)}};
array ->
{tagged,
<<"Array"/utf8>>,
eyg@interpreter@value:unit()};
object ->
{tagged,
<<"Object"/utf8>>,
eyg@interpreter@value:unit()};
{field, F} ->
{tagged, <<"Field"/utf8>>, {string, F}}
end,
{record,
maps:from_list(
[{<<"term"/utf8>>, Term@1},
{<<"depth"/utf8>>, {integer, Depth}}]
)}
end
)},
eyg@interpreter@value:ok(List);
{error, Reason} ->
eyg@interpreter@value:error({string, Reason})
end.
-file("src/touch_grass/decode_json.gleam", 61).
-spec sync(bitstring()) -> eyg@interpreter@value:value(any(), any()).
sync(Raw) ->
Result = begin
_pipe = julienne:parse_bits(Raw),
gleam@result:map_error(_pipe, fun julienne:describe_reason/1)
end,
encode(Result).