-module(example@demo). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/example/demo.gleam"). -export([main/0]). -file("src/example/demo.gleam", 43). -spec demo_simple_user() -> nil. demo_simple_user() -> User = {object, [{<<"name"/utf8>>, {string, <<"Alice"/utf8>>}}, {<<"age"/utf8>>, {number, 30.0}}, {<<"active"/utf8>>, {bool, true}}, {<<"role"/utf8>>, {string, <<"admin"/utf8>>}}]}, Encoded = toon_codec:encode(User), gleam_stdlib:println(<<"Encoded:"/utf8>>), gleam_stdlib:println(Encoded). -file("src/example/demo.gleam", 57). -spec demo_nested_objects() -> nil. demo_nested_objects() -> Person = {object, [{<<"name"/utf8>>, {string, <<"Bob Smith"/utf8>>}}, {<<"email"/utf8>>, {string, <<"bob@example.com"/utf8>>}}, {<<"address"/utf8>>, {object, [{<<"street"/utf8>>, {string, <<"123 Main St"/utf8>>}}, {<<"city"/utf8>>, {string, <<"New York"/utf8>>}}, {<<"zip"/utf8>>, {string, <<"10001"/utf8>>}}, {<<"coordinates"/utf8>>, {object, [{<<"lat"/utf8>>, {number, 40.7128}}, {<<"lng"/utf8>>, {number, -74.006}}]}}]}}]}, Encoded = toon_codec:encode(Person), gleam_stdlib:println(<<"Encoded:"/utf8>>), gleam_stdlib:println(Encoded). -file("src/example/demo.gleam", 81). -spec demo_inline_array() -> nil. demo_inline_array() -> Numbers = {array, [{number, 1.0}, {number, 2.0}, {number, 3.0}, {number, 4.0}]}, Encoded = toon_codec:encode(Numbers), gleam_stdlib:println(<<"Encoded:"/utf8>>), gleam_stdlib:println(Encoded). -file("src/example/demo.gleam", 89). -spec demo_tabular_array() -> nil. demo_tabular_array() -> Users = {array, [{object, [{<<"name"/utf8>>, {string, <<"Alice"/utf8>>}}, {<<"age"/utf8>>, {number, 30.0}}, {<<"active"/utf8>>, {bool, true}}]}, {object, [{<<"name"/utf8>>, {string, <<"Bob"/utf8>>}}, {<<"age"/utf8>>, {number, 25.0}}, {<<"active"/utf8>>, {bool, false}}]}, {object, [{<<"name"/utf8>>, {string, <<"Charlie"/utf8>>}}, {<<"age"/utf8>>, {number, 35.0}}, {<<"active"/utf8>>, {bool, true}}]}]}, Encoded = toon_codec:encode(Users), gleam_stdlib:println(<<"Encoded:"/utf8>>), gleam_stdlib:println(Encoded). -file("src/example/demo.gleam", 114). -spec demo_expanded_array() -> nil. demo_expanded_array() -> Mixed = {array, [{string, <<"text item"/utf8>>}, {number, 42.0}, {bool, true}, {object, [{<<"key"/utf8>>, {string, <<"value"/utf8>>}}, {<<"count"/utf8>>, {number, 10.0}}]}, {array, [{string, <<"nested"/utf8>>}, {string, <<"array"/utf8>>}]}]}, Encoded = toon_codec:encode(Mixed), gleam_stdlib:println(<<"Encoded:"/utf8>>), gleam_stdlib:println(Encoded). -file("src/example/demo.gleam", 129). -spec demo_custom_delimiter() -> nil. demo_custom_delimiter() -> Data = {array, [{string, <<"apple"/utf8>>}, {string, <<"banana"/utf8>>}, {string, <<"cherry"/utf8>>}]}, Options = {encode_options, 2, tab, no_marker}, Encoded = toon_codec:encode_with_options(Data, Options), gleam_stdlib:println(<<"Encoded with Tab delimiter:"/utf8>>), gleam_stdlib:println(Encoded), Options_pipe = {encode_options, 2, pipe, no_marker}, Encoded_pipe = toon_codec:encode_with_options(Data, Options_pipe), gleam_stdlib:println(<<"\nEncoded with Pipe delimiter:"/utf8>>), gleam_stdlib:println(Encoded_pipe). -file("src/example/demo.gleam", 147). -spec demo_custom_options() -> nil. demo_custom_options() -> Data = {object, [{<<"title"/utf8>>, {string, <<"Project"/utf8>>}}, {<<"tasks"/utf8>>, {array, [{object, [{<<"id"/utf8>>, {number, 1.0}}, {<<"name"/utf8>>, {string, <<"Task 1"/utf8>>}}]}, {object, [{<<"id"/utf8>>, {number, 2.0}}, {<<"name"/utf8>>, {string, <<"Task 2"/utf8>>}}]}]}}]}, Encode_options = {encode_options, 4, comma, hash_marker}, Encoded = toon_codec:encode_with_options(Data, Encode_options), gleam_stdlib:println( <<"Encoded with 4-space indent and hash markers:"/utf8>> ), gleam_stdlib:println(Encoded). -file("src/example/demo.gleam", 168). -spec demo_roundtrip() -> nil. demo_roundtrip() -> Original = {object, [{<<"product"/utf8>>, {string, <<"Widget"/utf8>>}}, {<<"price"/utf8>>, {number, 19.99}}, {<<"in_stock"/utf8>>, {bool, true}}, {<<"tags"/utf8>>, {array, [{string, <<"electronics"/utf8>>}, {string, <<"gadgets"/utf8>>}]}}]}, gleam_stdlib:println(<<"Original:"/utf8>>), gleam_stdlib:println(gleam@string:inspect(Original)), Encoded = toon_codec:encode(Original), gleam_stdlib:println(<<"\nEncoded to TOON:"/utf8>>), gleam_stdlib:println(Encoded), case toon_codec:decode(Encoded) of {ok, Decoded} -> gleam_stdlib:println(<<"\nDecoded back to JsonValue:"/utf8>>), gleam_stdlib:println(gleam@string:inspect(Decoded)), gleam_stdlib:println(<<"\n✓ Round-trip successful!"/utf8>>); {error, Err} -> gleam_stdlib:println(<<"\n✗ Decoding failed:"/utf8>>), gleam_stdlib:println(gleam@string:inspect(Err)) end. -file("src/example/demo.gleam", 9). -spec main() -> nil. main() -> gleam_stdlib:println(<<"=== TOON DEMO ===\n"/utf8>>), gleam_stdlib:println(<<"1. Simple User Object"/utf8>>), demo_simple_user(), gleam_stdlib:println(<<"\n2. Nested Objects (Person with Address)"/utf8>>), demo_nested_objects(), gleam_stdlib:println(<<"\n3. Arrays - Inline Format (Primitives)"/utf8>>), demo_inline_array(), gleam_stdlib:println(<<"\n4. Arrays - Tabular Format (Objects)"/utf8>>), demo_tabular_array(), gleam_stdlib:println(<<"\n5. Arrays - Expanded Format (Mixed Types)"/utf8>>), demo_expanded_array(), gleam_stdlib:println(<<"\n6. Custom Delimiters (Tab-separated)"/utf8>>), demo_custom_delimiter(), gleam_stdlib:println( <<"\n7. Custom Options (4-space indent, hash markers)"/utf8>> ), demo_custom_options(), gleam_stdlib:println(<<"\n8. Round-trip Test (Encode -> Decode)"/utf8>>), demo_roundtrip().