toon_codec
TOON (Token-Oriented Object Notation) encoder/decoder for Gleam.
TOON is a compact, human-readable format for LLM input that reduces token usage compared to JSON while maintaining readability.
This library provides encoding and decoding functions for converting between JSON-like values and TOON format strings.
Quick Start
import toon_codec.{type JsonValue, Object, String, Number}
pub fn main() {
  // Create a JSON value
  let user = Object([
    #("name", String("Alice")),
    #("age", Number(30.0)),
    #("active", Bool(True)),
  ])
  // Encode to TOON
  let toon_str = toon_codec.encode(user)
  // Result: "name: Alice\nage: 30\nactive: true"
  // Decode back to JSON
  case toon_codec.decode(toon_str) {
    Ok(decoded) -> // Process the decoded value
    Error(err) -> // Handle the error
  }
}
Custom Options
import toon_codec.{EncodeOptions, Tab}
let options = EncodeOptions(
  indent: 4,
  delimiter: Tab,
  length_marker: HashMarker,
)
let toon = toon_codec.encode_with_options(value, options)
Encode a JSON value to TOON format with default options.
Default options:
- indent: 2 spaces
 - delimiter: comma
 - length_marker: no marker
 
Examples
let value = Object([
  #("name", String("Alice")),
  #("age", Number(30.0)),
])
encode(value)
// -> "name: Alice\nage: 30"
Encode a JSON value to TOON format with custom options.
Examples
let options = EncodeOptions(
  indent: 4,
  delimiter: Tab,
  length_marker: HashMarker,
)
encode_with_options(value, options)
Decode TOON format to JSON value with default options.
Default options:
- indent: 2 spaces
 - strict: true
 
Examples
decode("name: Alice\nage: 30")
// -> Ok(Object([#("name", String("Alice")), #("age", Number(30.0))]))
Decode TOON format to JSON value with custom options.
Examples
let options = DecodeOptions(indent: 4, strict: False)
decode_with_options(input, options)
Get the default encoding options.
Returns:
- indent: 2
 - delimiter: Comma
 - length_marker: NoMarker Get the default decoding options.
 
Returns:
- indent: 2
 - strict: True
 
Types
pub type DecodeOptions =
  types.DecodeOptions
      
    pub type Delimiter =
  types.Delimiter
      
    pub type EncodeOptions =
  types.EncodeOptions
      
    pub type JsonValue =
  types.JsonValue
      
    pub type LengthMarker =
  types.LengthMarker
      
    pub type ToonError =
  error.ToonError
      
    Values
pub fn decode(
  input: String,
) -> Result(types.JsonValue, error.ToonError)
    
    
  pub fn decode_with_options(
  input: String,
  options: types.DecodeOptions,
) -> Result(types.JsonValue, error.ToonError)
    
    
  pub fn default_decode_options() -> types.DecodeOptions
    
    
  pub fn default_encode_options() -> types.EncodeOptions
    
    
  pub fn encode(value: types.JsonValue) -> String
    
    
  pub fn encode_with_options(
  value: types.JsonValue,
  options: types.EncodeOptions,
) -> String