-module(toon_codec@encode). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/toon_codec/encode.gleam"). -export([encode_value/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. ?MODULEDOC( " Main encoding module for converting JSON values to TOON format.\n" "\n" " This module provides the primary encoding function that coordinates\n" " the encoding of any JSON value to TOON format.\n" " Encode a JSON value to TOON format string.\n" "\n" " This is the main entry point for encoding. It handles all JSON value types:\n" " - Primitives (null, booleans, numbers, strings)\n" " - Arrays (inline, tabular, or expanded)\n" " - Objects (flat or nested)\n" "\n" " ## Examples\n" "\n" " ```gleam\n" " // Simple object\n" " let value = Object([\n" " #(\"name\", JsonString(\"Alice\")),\n" " #(\"age\", Number(30.0)),\n" " ])\n" " encode_value(value, default_encode_options())\n" " // -> \"name: Alice\\nage: 30\"\n" "\n" " // Nested object\n" " let value = Object([\n" " #(\"user\", Object([\n" " #(\"id\", Number(1.0)),\n" " #(\"name\", JsonString(\"Bob\")),\n" " ])),\n" " ])\n" " encode_value(value, default_encode_options())\n" " // -> \"user:\\n id: 1\\n name: Bob\"\n" "\n" " // Array\n" " let value = Array([Number(1.0), Number(2.0), Number(3.0)])\n" " encode_value(value, default_encode_options())\n" " // -> \"[3]: 1,2,3\"\n" " ```\n" ). -file("src/toon_codec/encode.gleam", 51). -spec encode_value( toon_codec@types:json_value(), toon_codec@types:encode_options() ) -> binary(). encode_value(Value, Options) -> case Value of null -> toon_codec@encode@primitives:encode_primitive( Value, erlang:element(3, Options) ); {bool, _} -> toon_codec@encode@primitives:encode_primitive( Value, erlang:element(3, Options) ); {number, _} -> toon_codec@encode@primitives:encode_primitive( Value, erlang:element(3, Options) ); {string, _} -> toon_codec@encode@primitives:encode_primitive( Value, erlang:element(3, Options) ); {array, Items} -> W = toon_codec@encode@writer:new(erlang:element(2, Options)), W@1 = toon_codec@encode@arrays:encode_array( none, Items, W, 0, Options ), toon_codec@encode@writer:to_string(W@1); {object, Fields} -> case Fields of [] -> <<""/utf8>>; _ -> W@2 = toon_codec@encode@writer:new( erlang:element(2, Options) ), W@3 = toon_codec@encode@objects:encode_object( Fields, W@2, 0, Options ), toon_codec@encode@writer:to_string(W@3) end end.