-module(encoder). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/encoder.gleam"). -export([glee_encode_string/1, glee_encode_int/1, glee_encode_float/1, glee_encode_bool/1, glee_encode_list/1, glee_encode_object/1, glee_create_json_object/2, glee_create_json_object_from_pairs/1, glee_parse_json_bool/2]). -if(?OTP_RELEASE >= 27). -define(MODULEDOC(Str), -moduledoc(Str)). -define(DOC(Str), -doc(Str)). -else. -define(MODULEDOC(Str), -compile([])). -define(DOC(Str), -compile([])). -endif. -file("src/encoder.gleam", 10). ?DOC(" Encode a string value into a JSON string\n"). -spec glee_encode_string(binary()) -> binary(). glee_encode_string(Value) -> Escaped = gleam@string:replace(Value, <<"\""/utf8>>, <<"\\\""/utf8>>), <<<<"\""/utf8, Escaped/binary>>/binary, "\""/utf8>>. -file("src/encoder.gleam", 16). ?DOC(" Encode an int value into a JSON string\n"). -spec glee_encode_int(integer()) -> binary(). glee_encode_int(Value) -> erlang:integer_to_binary(Value). -file("src/encoder.gleam", 21). ?DOC(" Encode a float value into a JSON string\n"). -spec glee_encode_float(float()) -> binary(). glee_encode_float(Value) -> gleam_stdlib:float_to_string(Value). -file("src/encoder.gleam", 26). ?DOC(" Encode a boolean value into a JSON string\n"). -spec glee_encode_bool(boolean()) -> binary(). glee_encode_bool(Value) -> case Value of true -> <<"true"/utf8>>; false -> <<"false"/utf8>> end. -file("src/encoder.gleam", 34). ?DOC(" Encode a list of values into a JSON array string\n"). -spec glee_encode_list(list(binary())) -> binary(). glee_encode_list(Values) -> Joined_values = gleam@list:fold( Values, <<""/utf8>>, fun(Acc, Value) -> case Acc of <<""/utf8>> -> Value; _ -> <<<>/binary, Value/binary>> end end ), <<<<"["/utf8, Joined_values/binary>>/binary, "]"/utf8>>. -file("src/encoder.gleam", 47). ?DOC(" Encode a map of string keys and string values into a JSON object string\n"). -spec glee_encode_object(gleam@dict:dict(binary(), binary())) -> binary(). glee_encode_object(Values) -> Entries = maps:to_list(Values), Joined_entries = gleam@list:fold( Entries, <<""/utf8>>, fun(Acc, Entry) -> {Key, Value} = Entry, Formatted_entry = <<<<(glee_encode_string(Key))/binary, ":"/utf8>>/binary, Value/binary>>, case Acc of <<""/utf8>> -> Formatted_entry; _ -> <<<>/binary, Formatted_entry/binary>> end end ), <<<<"{"/utf8, Joined_entries/binary>>/binary, "}"/utf8>>. -file("src/encoder.gleam", 65). ?DOC(" Create a simple JSON object with a single key-value pair\n"). -spec glee_create_json_object(binary(), binary()) -> binary(). glee_create_json_object(Key, Value) -> Values = maps:new(), Values@1 = gleam@dict:insert(Values, Key, Value), glee_encode_object(Values@1). -file("src/encoder.gleam", 72). ?DOC(" Create a JSON object from multiple key-value pairs\n"). -spec glee_create_json_object_from_pairs(list({binary(), binary()})) -> binary(). glee_create_json_object_from_pairs(Pairs) -> Values = maps:from_list(Pairs), glee_encode_object(Values). -file("src/encoder.gleam", 81). ?DOC( " Parse a JSON string and return\n" " the boolean value of a given field.\n" ). -spec glee_parse_json_bool(binary(), binary()) -> {ok, boolean()} | {error, binary()}. glee_parse_json_bool(Json, Field) -> Json_decoder = begin gleam@dynamic@decode:field( Field, {decoder, fun gleam@dynamic@decode:decode_bool/1}, fun(Json@1) -> gleam@dynamic@decode:success(Json@1) end ) end, Json_result = begin _pipe = Json, gleam@json:parse(_pipe, Json_decoder) end, case Json_result of {ok, Value} -> {ok, Value}; {error, _} -> {error, <<"Failed to parse boolean"/utf8>>} end.