Current section
Files
Jump to
Current section
Files
src/glean@json_value.erl
-module(glean@json_value).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/glean/json_value.gleam").
-export([to_json/1, to_string/1, decoder/0, dynamic_to_string/1, parse_to_json/1]).
-export_type([json_value/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(false).
-type json_value() :: json_null |
{json_bool, boolean()} |
{json_int, integer()} |
{json_float, float()} |
{json_string, binary()} |
{json_array, list(json_value())} |
{json_object, list({binary(), json_value()})}.
-file("src/glean/json_value.gleam", 44).
?DOC(false).
-spec to_json(json_value()) -> gleam@json:json().
to_json(Value) ->
case Value of
json_null ->
gleam@json:null();
{json_bool, B} ->
gleam@json:bool(B);
{json_int, I} ->
gleam@json:int(I);
{json_float, F} ->
gleam@json:float(F);
{json_string, S} ->
gleam@json:string(S);
{json_array, Items} ->
gleam@json:preprocessed_array(gleam@list:map(Items, fun to_json/1));
{json_object, Fields} ->
gleam@json:object(
gleam@list:map(
Fields,
fun(Kv) ->
{erlang:element(1, Kv), to_json(erlang:element(2, Kv))}
end
)
)
end.
-file("src/glean/json_value.gleam", 58).
?DOC(false).
-spec to_string(json_value()) -> binary().
to_string(Value) ->
_pipe = to_json(Value),
gleam@json:to_string(_pipe).
-file("src/glean/json_value.gleam", 32).
?DOC(false).
-spec non_null_decoder() -> gleam@dynamic@decode:decoder(json_value()).
non_null_decoder() ->
gleam@dynamic@decode:one_of(
begin
_pipe = {decoder, fun gleam@dynamic@decode:decode_string/1},
gleam@dynamic@decode:map(
_pipe,
fun(Field@0) -> {json_string, Field@0} end
)
end,
[begin
_pipe@1 = {decoder, fun gleam@dynamic@decode:decode_int/1},
gleam@dynamic@decode:map(
_pipe@1,
fun(Field@0) -> {json_int, Field@0} end
)
end,
begin
_pipe@2 = {decoder, fun gleam@dynamic@decode:decode_float/1},
gleam@dynamic@decode:map(
_pipe@2,
fun(Field@0) -> {json_float, Field@0} end
)
end,
begin
_pipe@3 = {decoder, fun gleam@dynamic@decode:decode_bool/1},
gleam@dynamic@decode:map(
_pipe@3,
fun(Field@0) -> {json_bool, Field@0} end
)
end,
begin
_pipe@4 = gleam@dynamic@decode:list(decoder()),
gleam@dynamic@decode:map(
_pipe@4,
fun(Field@0) -> {json_array, Field@0} end
)
end,
begin
_pipe@5 = gleam@dynamic@decode:dict(
{decoder, fun gleam@dynamic@decode:decode_string/1},
decoder()
),
gleam@dynamic@decode:map(
_pipe@5,
fun(D) -> {json_object, maps:to_list(D)} end
)
end]
).
-file("src/glean/json_value.gleam", 22).
?DOC(false).
-spec decoder() -> gleam@dynamic@decode:decoder(json_value()).
decoder() ->
gleam@dynamic@decode:recursive(
fun() ->
gleam@dynamic@decode:then(
gleam@dynamic@decode:optional(non_null_decoder()),
fun(Opt) -> case Opt of
none ->
gleam@dynamic@decode:success(json_null);
{some, Val} ->
gleam@dynamic@decode:success(Val)
end end
)
end
).
-file("src/glean/json_value.gleam", 64).
?DOC(false).
-spec dynamic_to_string(gleam@dynamic:dynamic_()) -> binary().
dynamic_to_string(Value) ->
case gleam@dynamic@decode:run(Value, decoder()) of
{ok, Json_value} ->
to_string(Json_value);
{error, _} ->
<<"{}"/utf8>>
end.
-file("src/glean/json_value.gleam", 74).
?DOC(false).
-spec parse_to_json(binary()) -> gleam@json:json().
parse_to_json(Json_string) ->
case gleam@json:parse(Json_string, decoder()) of
{ok, Json_value} ->
to_json(Json_value);
{error, _} ->
gleam@json:object([])
end.