-module(toon_codec@encode@objects). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/toon_codec/encode/objects.gleam"). -export([encode_object/4]). -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( " Object encoding functions.\n" "\n" " This module handles encoding of JSON objects to TOON format,\n" " including nested objects and empty objects.\n" " Encode an object to TOON format.\n" "\n" " Objects are encoded as key-value pairs at the specified depth.\n" " Each field appears on its own line with proper indentation.\n" "\n" " ## Arguments\n" "\n" " * `fields` - List of key-value pairs\n" " * `writer` - The line writer to append to\n" " * `depth` - Current indentation depth\n" " * `options` - Encoding options\n" " Encode a single key-value pair.\n" "\n" " Handles primitives, nested objects, and arrays appropriately.\n" " Encode a nested object.\n" "\n" " Empty objects are rendered as \"key:\" with no content below.\n" " Non-empty objects have their fields at depth + 1.\n" " Delegate array encoding to the arrays module.\n" ). -file("src/toon_codec/encode/objects.gleam", 96). -spec encode_array_for_key( binary(), list(toon_codec@types:json_value()), toon_codec@encode@writer:writer(), integer(), toon_codec@types:encode_options() ) -> toon_codec@encode@writer:writer(). encode_array_for_key(Key, Items, Writer, Depth, Options) -> toon_codec@encode@arrays:encode_array( {some, Key}, Items, Writer, Depth, Options ). -file("src/toon_codec/encode/objects.gleam", 77). -spec encode_nested_object( binary(), list({binary(), toon_codec@types:json_value()}), toon_codec@encode@writer:writer(), integer(), toon_codec@types:encode_options() ) -> toon_codec@encode@writer:writer(). encode_nested_object(Encoded_key, Fields, Writer, Depth, Options) -> Writer@1 = toon_codec@encode@writer:push( Writer, Depth, <> ), case Fields of [] -> Writer@1; _ -> encode_object(Fields, Writer@1, Depth + 1, Options) end. -file("src/toon_codec/encode/objects.gleam", 34). -spec encode_object( list({binary(), toon_codec@types:json_value()}), toon_codec@encode@writer:writer(), integer(), toon_codec@types:encode_options() ) -> toon_codec@encode@writer:writer(). encode_object(Fields, Writer, Depth, Options) -> gleam@list:fold( Fields, Writer, fun(W, Pair) -> encode_key_value_pair( erlang:element(1, Pair), erlang:element(2, Pair), W, Depth, Options ) end ). -file("src/toon_codec/encode/objects.gleam", 47). -spec encode_key_value_pair( binary(), toon_codec@types:json_value(), toon_codec@encode@writer:writer(), integer(), toon_codec@types:encode_options() ) -> toon_codec@encode@writer:writer(). encode_key_value_pair(Key, Value, Writer, Depth, Options) -> Encoded_key = toon_codec@encode@primitives:encode_key(Key), case Value of null -> Encoded_value = toon_codec@encode@primitives:encode_primitive( Value, erlang:element(3, Options) ), Line = <<<>/binary, Encoded_value/binary>>, toon_codec@encode@writer:push(Writer, Depth, Line); {bool, _} -> Encoded_value = toon_codec@encode@primitives:encode_primitive( Value, erlang:element(3, Options) ), Line = <<<>/binary, Encoded_value/binary>>, toon_codec@encode@writer:push(Writer, Depth, Line); {number, _} -> Encoded_value = toon_codec@encode@primitives:encode_primitive( Value, erlang:element(3, Options) ), Line = <<<>/binary, Encoded_value/binary>>, toon_codec@encode@writer:push(Writer, Depth, Line); {string, _} -> Encoded_value = toon_codec@encode@primitives:encode_primitive( Value, erlang:element(3, Options) ), Line = <<<>/binary, Encoded_value/binary>>, toon_codec@encode@writer:push(Writer, Depth, Line); {array, Items} -> encode_array_for_key(Key, Items, Writer, Depth, Options); {object, Nested_fields} -> encode_nested_object( Encoded_key, Nested_fields, Writer, Depth, Options ) end.