Skip to main content

src/molt@types.erl

-module(molt@types).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/molt/types.gleam").
-export_type([path_segment/0, toml_version/0, index_entry/0, span/0, syntax_error_kind/0, syntax_error/0, document/0, toml_kind/0, index_key/0]).

-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(" Shared types for molt, molt/cst, molt/ops, and molt/value.\n").

-type path_segment() :: {key_segment, binary()} | {index_segment, integer()}.

-opaque toml_version() :: {toml_version, binary()}.

-type index_entry() :: {index_table, list(binary())} |
    {index_array_of_tables, integer(), list(binary())} |
    {index_array_of_tables_entry,
        list(path_segment()),
        integer(),
        list(binary())} |
    {index_implicit_table, list(binary())} |
    {index_scalar_value, list(path_segment())} |
    {index_inline_table_value, list(path_segment())} |
    {index_array_value, list(path_segment())}.

-type span() :: {span, integer(), integer(), integer()}.

-type syntax_error_kind() :: {duplicate_key, binary(), span()} |
    {duplicate_table, span()} |
    {key_is_scalar, binary(), span()} |
    {key_is_inline_table, binary(), span()} |
    {key_is_array, binary(), span()} |
    invalid_key_syntax |
    missing_value |
    extra_equals |
    multiple_values |
    empty_table_header |
    malformed_table_header |
    unterminated_array |
    misplaced_array_separator |
    unterminated_inline_table |
    {duplicate_key_in_inline_table, binary()} |
    invalid_bare_value_in_inline_table |
    misplaced_inline_table_separator |
    unterminated_string |
    unterminated_multiline_string |
    {bad_value, binary()} |
    unparsable_content |
    no_valid_toml_structure.

-type syntax_error() :: {syntax_error,
        syntax_error_kind(),
        list(binary()),
        span()}.

-type document() :: {document,
        toml_version(),
        integer(),
        greenwood:node_(toml_kind()),
        gleam@option:option(gleam@dict:dict(index_key(), index_entry()))}.

-type toml_kind() :: root |
    table |
    array_of_tables |
    key_value |
    key |
    array |
    inline_table |
    array_element |
    error |
    post_script |
    bom |
    bare_key |
    invalid_value |
    invalid_basic_string |
    invalid_literal_string |
    invalid_multiline_basic_string |
    invalid_multiline_literal_string |
    basic_string |
    multiline_basic_string |
    multiline_basic_string_nl |
    literal_string |
    multiline_literal_string |
    multiline_literal_string_nl |
    integer |
    binary_integer |
    hex_integer |
    octal_integer |
    float |
    bool_true |
    bool_false |
    inf |
    pos_inf |
    neg_inf |
    na_n |
    pos_na_n |
    neg_na_n |
    offset_date_time |
    local_date_time |
    local_date |
    local_time |
    equals |
    dot |
    comma |
    left_bracket |
    right_bracket |
    left_brace |
    right_brace |
    comment |
    whitespace |
    newline.

-type index_key() :: {index_key, list(path_segment())}.