Packages
toon_codec
1.0.0
TOON (Token-Oriented Object Notation) encoder/decoder - a compact, token-efficient format for LLM input
Current section
Files
Jump to
Current section
Files
src/example@demo.erl
-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().