toon_codec/types

Core type definitions for the TOON encoder/decoder.

This module defines the JSON value representation, configuration options, and internal types used throughout the library. Represents a JSON value that can be encoded/decoded to TOON format.

This type is compatible with standard JSON representations and preserves key ordering for objects.

Examples

let user = Object([
  #("name", String("Alice")),
  #("age", Number(30.0)),
  #("active", Bool(True)),
])

Delimiter character used to separate values in arrays and tabular rows.

The delimiter determines how inline primitive arrays and tabular data are formatted and parsed. Converts a delimiter to its string representation. Optional marker to prefix array lengths in headers.

When set to HashMarker, arrays render as [#N] instead of [N]. Configuration options for encoding JSON values to TOON format.

Examples

let options = EncodeOptions(
  indent: 2,
  delimiter: Comma,
  length_marker: NoMarker,
)

Returns the default encoding options.

Examples

let options = default_encode_options()
// EncodeOptions(indent: 2, delimiter: Comma, length_marker: NoMarker)

Configuration options for decoding TOON format to JSON values.

Examples

let options = DecodeOptions(indent: 2, strict: True)

Returns the default decoding options.

Examples

let options = default_decode_options()
// DecodeOptions(indent: 2, strict: True)

Internal: Represents a parsed line with depth and metadata.

This opaque type is used internally by the decoder to track line information during parsing. The depth indicates the indentation level. Create a new ParsedLine. Get the depth of a parsed line. Get the content of a parsed line. Get the line number of a parsed line. Get the indent of a parsed line. Internal: Information parsed from an array header line.

This type represents the structured data extracted from headers like:

Types

pub type ArrayHeader {
  ArrayHeader(
    key: option.Option(String),
    length: Int,
    delimiter: Delimiter,
    fields: option.Option(List(String)),
    has_length_marker: Bool,
  )
}

Constructors

  • ArrayHeader(
      key: option.Option(String),
      length: Int,
      delimiter: Delimiter,
      fields: option.Option(List(String)),
      has_length_marker: Bool,
    )

    Arguments

    key

    Optional key name for the array

    length

    Declared array length

    delimiter

    Active delimiter for this array’s scope

    fields

    Optional field names for tabular arrays

    has_length_marker

    Whether the length marker “#” was present

pub type DecodeOptions {
  DecodeOptions(indent: Int, strict: Bool)
}

Constructors

  • DecodeOptions(indent: Int, strict: Bool)

    Arguments

    indent

    Number of spaces per indentation level (default: 2)

    strict

    Enable strict mode validation (default: True)

pub type Delimiter {
  Comma
  Tab
  Pipe
}

Constructors

  • Comma

    Comma delimiter “,” (default)

  • Tab

    Tab delimiter (HTAB, U+0009)

  • Pipe

    Pipe delimiter “|”

pub type EncodeOptions {
  EncodeOptions(
    indent: Int,
    delimiter: Delimiter,
    length_marker: LengthMarker,
  )
}

Constructors

  • EncodeOptions(
      indent: Int,
      delimiter: Delimiter,
      length_marker: LengthMarker,
    )

    Arguments

    indent

    Number of spaces per indentation level (default: 2)

    delimiter

    Delimiter for arrays and tabular data (default: Comma)

    length_marker

    Optional length marker in array headers (default: NoMarker)

pub type JsonValue {
  Null
  Bool(Bool)
  Number(Float)
  String(String)
  Array(List(JsonValue))
  Object(List(#(String, JsonValue)))
}

Constructors

  • Null

    Represents a null value

  • Bool(Bool)

    Represents a boolean value (true or false)

  • Number(Float)

    Represents a numeric value (integers and floats are both Float in Gleam)

  • String(String)

    Represents a string value

  • Array(List(JsonValue))

    Represents an array of JSON values

  • Object(List(#(String, JsonValue)))

    Represents an object as an ordered list of key-value pairs

pub type LengthMarker {
  NoMarker
  HashMarker
}

Constructors

  • NoMarker

    No length marker (default): [3]

  • HashMarker

    Hash marker prefix: [#3]

pub opaque type ParsedLine
pub type RootForm {
  RootArray
  RootObject
  RootPrimitive(JsonValue)
}

Constructors

  • RootArray

    Root is an array (starts with array header)

  • RootObject

    Root is an object (key-value pairs at depth 0)

  • RootPrimitive(JsonValue)

    Root is a single primitive value

Values

pub fn default_decode_options() -> DecodeOptions
pub fn default_encode_options() -> EncodeOptions
pub fn delimiter_to_string(delimiter: Delimiter) -> String
pub fn new_parsed_line(
  raw: String,
  depth: Int,
  indent: Int,
  content: String,
  line_number: Int,
) -> ParsedLine
pub fn parsed_line_content(line: ParsedLine) -> String
pub fn parsed_line_depth(line: ParsedLine) -> Int
pub fn parsed_line_indent(line: ParsedLine) -> Int
pub fn parsed_line_number(line: ParsedLine) -> Int
Search Document