-module(kdleam@serialize). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/kdleam/serialize.gleam"). -export([write_quoted_string/1, write_value/1, can_be_bare_identifier/1, write_identifier_or_string/1, serialize/1]). -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). -file("src/kdleam/serialize.gleam", 85). ?DOC(false). -spec escape_char(binary()) -> binary(). escape_char(Ch) -> case Ch of <<"\""/utf8>> -> <<"\\\""/utf8>>; <<"\\"/utf8>> -> <<"\\\\"/utf8>>; <<"\n"/utf8>> -> <<"\\n"/utf8>>; <<"\r"/utf8>> -> <<"\\r"/utf8>>; <<"\t"/utf8>> -> <<"\\t"/utf8>>; <<"\x{0008}"/utf8>> -> <<"\\b"/utf8>>; <<"\x{000C}"/utf8>> -> <<"\\f"/utf8>>; C -> case kdleam@scanner:is_newline(C) orelse kdleam@scanner:is_disallowed( C ) of true -> <<<<"\\u{"/utf8, ((kdleam@scanner:to_upper_hex( kdleam@scanner:codepoint(C) )))/binary>>/binary, "}"/utf8>>; false -> C end end. -file("src/kdleam/serialize.gleam", 77). ?DOC(false). -spec write_quoted_string(binary()) -> binary(). write_quoted_string(Value) -> <<<<"\""/utf8, (begin _pipe = Value, _pipe@1 = gleam@string:to_graphemes(_pipe), _pipe@2 = gleam@list:map(_pipe@1, fun escape_char/1), gleam@string:join(_pipe@2, <<""/utf8>>) end)/binary>>/binary, "\""/utf8>>. -file("src/kdleam/serialize.gleam", 58). ?DOC(false). -spec write_value(kdleam@document:kdl_value()) -> binary(). write_value(Value) -> case Value of {kdl_string, Value@1} -> write_quoted_string(Value@1); {kdl_number_value, Number} -> kdleam@document:number_raw(Number); {kdl_bool, true} -> <<"#true"/utf8>>; {kdl_bool, false} -> <<"#false"/utf8>>; kdl_null -> <<"#null"/utf8>> end. -file("src/kdleam/serialize.gleam", 103). ?DOC(false). -spec can_be_bare_identifier(binary()) -> boolean(). can_be_bare_identifier(Value) -> kdleam@scanner:can_be_bare(Value). -file("src/kdleam/serialize.gleam", 69). ?DOC(false). -spec write_identifier_or_string(binary()) -> binary(). write_identifier_or_string(Value) -> case can_be_bare_identifier(Value) of true -> Value; false -> write_quoted_string(Value) end. -file("src/kdleam/serialize.gleam", 50). ?DOC(false). -spec write_type(gleam@option:option(binary())) -> binary(). write_type(Ty) -> case Ty of {some, Ty@1} -> <<<<"("/utf8, (write_identifier_or_string(Ty@1))/binary>>/binary, ")"/utf8>>; none -> <<""/utf8>> end. -file("src/kdleam/serialize.gleam", 38). ?DOC(false). -spec write_entry(kdleam@document:kdl_entry()) -> binary(). write_entry(Entry) -> case Entry of {kdl_argument, Ty, Value} -> <<(write_type(Ty))/binary, (write_value(Value))/binary>>; {kdl_property, Key, Ty@1, Value@1} -> <<<<<<(write_identifier_or_string(Key))/binary, "="/utf8>>/binary, (write_type(Ty@1))/binary>>/binary, (write_value(Value@1))/binary>> end. -file("src/kdleam/serialize.gleam", 15). ?DOC(false). -spec write_node(kdleam@document:kdl_node(), integer()) -> binary(). write_node(Node, Depth) -> {kdl_node, Ty, Name, Entries, Children} = Node, Head = <<<<(kdleam@scanner:repeat(<<" "/utf8>>, Depth))/binary, (write_type(Ty))/binary>>/binary, (write_identifier_or_string(Name))/binary>>, Entry_text = begin _pipe = Entries, _pipe@1 = gleam@list:map( _pipe, fun(Entry) -> <<" "/utf8, (write_entry(Entry))/binary>> end ), gleam@string:join(_pipe@1, <<""/utf8>>) end, case Children of {some, Kids} -> <<<<<<<<<>/binary, " {\n"/utf8>>/binary, (begin _pipe@2 = Kids, _pipe@3 = gleam@list:map( _pipe@2, fun(_capture) -> write_node(_capture, Depth + 1) end ), gleam@string:join(_pipe@3, <<""/utf8>>) end)/binary>>/binary, (kdleam@scanner:repeat(<<" "/utf8>>, Depth))/binary>>/binary, "}\n"/utf8>>; _ -> <<<>/binary, "\n"/utf8>> end. -file("src/kdleam/serialize.gleam", 10). ?DOC(false). -spec serialize(kdleam@document:kdl_document()) -> binary(). serialize(Doc) -> {kdl_document, Nodes} = Doc, _pipe = Nodes, _pipe@1 = gleam@list:map( _pipe, fun(_capture) -> write_node(_capture, 0) end ), gleam@string:join(_pipe@1, <<""/utf8>>).