1/mattyhall/tomlz v0.32

A toml parser for Zig


tomlz

A TOML parser for Zig targeting TOML v1.0.0, an easy API and safety. Also supports encoding/serializing values(implemented by @0x5a4)!

const std = @import("std")
const tomlz = @import("tomlz")

var gpa = std.heap.page_allocator;
var table = try tomlz.parse(gpa,
    \\foo = 1
    \\bar = 2
);
defer table.deinit(gpa);

table.getInteger("foo").?; // 1


// --- or ---
const S = struct { foo: i64, bar: i64 };
const s = try tomlz.decode(S, gpa,
  \\foo = 1
  \\bar = 2
);

// serialize a value like this (also see the examples)
try tomlz.serialize(
    gpa,
    std.io.getStdout.writer()
    s,
);
// foo = 1
// bar = 2

Current status

All types other than datetimes are supported. We pass 321/334 of the toml tests 11 of those are due to not having datetime support and the other two are minor lexing issues (allowing whitespace between the square brackets of an array header).

We allow both parsing into a special TOML type, a Table, but also support decoding into a struct directly - including types that must be allocated like arrays and strings.

The Serializer allows encoding every kind of zig type, overwriting it's default behaviour by implementing a function called tomlzSerialize, has the option to work without an allocator and can therefore even work at comptime! Note that for some types like std.HashMap its not possible to just encode all their fields, so custom logic is needed. We can't provide this, but it's not too difficult to implement it yourself(See examples).

Installation

tomlz supports being included as a module.

Create a file called build.zig.zon if you do not already have one, and add tomlz as a dependency

.{
    .name = "myproject",
    .version = "0.1.0",
    .dependencies = .{
        .tomlz = .{
            .url = "https://github.com/mattyhall/tomlz/archive/<commit-hash>.tar.gz",
            .hash = "12206cf9e90462ee6e14f593ea6e0802b9fe434429ba10992a1451e32900f741005c",
        },
    }
}

You'll have to replace the <commit-hash> part with an actual, recent commit-hash. The hash also needs changing, but zig build will complain and give you the correct one.

In your build.zig file create and use the dependency

pub fn build(b: *std.Build) void {
    // ... setup ...

    const tomlz = b.dependency("tomlz", .{
        .target = target,
        .optimize = optimize,
    });

    // add the tomlz module
    exe.root_module.addImport("tomlz", tomlz.module("tomlz"));

    // .. continue ...
}

Usage

Table

We currently provide a single entry point for parsing which returns a toml Table type. This type has helper methods for getting values out:

const std = @import("std");
const tomlz = @import("tomlz");

var gpa = std.heap.page_allocator;
var table = try tomlz.parse(gpa,
    \\int = 1
    \\float = 2.0
    \\boolean = true
    \\string = "hello, world"
    \\array = [1, 2, 3]
    \\table = { subvalue = 1, we.can.nest.keys = 2 }
);
defer table.deinit(gpa);

table.getInteger("int");
table.getFloat("float");
table.getBool("boolean");
table.getString("string");
table.getArray("array");
table.getTable("table");

A simple example is provided.

Decode

const std = @import("std");
const tomlz = @import("tomlz");

var gpa = std.heap.page_allocator;
const TripleCrowns = struct { worlds: i64, masters: i64, uks: i64 };

const Player = struct {
    name: []const u8,
    age: i64,
    hobbies: []const []const u8,
    triplecrowns: TripleCrowns,

    const Self = @This();

    pub fn deinit(self: *Self, gpa: std.mem.Allocator) void {
        gpa.free(self.name);

        for (self.hobbies) |hobby| {
            gpa.free(hobby);
        }
        gpa.free(self.hobbies);
    }
};

const Game = struct {
    name: []const u8,
    goat: Player,

    const Self = @This();

    pub fn deinit(self: *Self, gpa: std.mem.Allocator) void {
        gpa.free(self.name);
        self.goat.deinit(gpa);
    }
};

var s = try tomlz.decode(Game, gpa,
    \\name = "snooker"
    \\
    \\[goat]
    \\name = "Ronnie o' Sullivan"
    \\age = 46 # as of Nov 2022
    \\hobbies = ["running", "hustling at pool"]
    \\
    \\[goat.triplecrowns]
    \\worlds = 7
    \\masters = 7
    \\uks = 7
);
defer s.deinit(gpa);

Encode

Have a look at the example.

Goals and non-goals

Goals and non-goals are subject to change based on how the project is used and my own time constraints. If you feel a goal or non-goal isn't quite right please open an issue and we can discuss it.

Goals

  • TOML v1.0.0. The datetime portion of this is probably going to be unachievable until Zig gets a good standard library type for it or a library gets dominance. Other than that however we should pass all the tests
  • A nice API. Getting values from the Value type should be painless as possible and we should also provide deserialising a Table into a struct, similarly to how std.json does it
  • Easy installation. We should try to make using the library as a vendored dependency and as a package - on e.g. gyro - as easy as possible
  • Safety. The parser should never crash no matter the input. To achieve this we should run fuzzing against it
  • Support Zig master and the latest tagged release until Zig v1.0. This will be done by having the main branch track Zig master and a branch for each Zig release. Any improvements should be backported to the most recent release branch
  • Good error messages

Non-goals

  • Super duper performance. We want to be as performant as possible without making the code harder to read. It is unlikely that parsing a TOML file is going to be the bottleneck in your application so "good" performance should be sufficient
  • Previous versions of TOML

Package Contents

  • gyro.zzz
  • .gitattributes
  • .github/workflows/build.yml
  • examples/serialize-custom/build.zig
  • examples/serialize-custom/src/main.zig
  • examples/simple/build.zig
  • examples/simple/src/main.zig
  • examples/serialize/build.zig
  • examples/serialize/src/main.zig
  • build.zig
  • zigmod.yml
  • flake.lock
  • tests/invalid/table/rrbrace.toml
  • tests/invalid/table/equals-sign.toml
  • tests/invalid/table/duplicate-table-array.toml
  • tests/invalid/table/whitespace.toml
  • tests/invalid/table/nested-brackets-close.toml
  • tests/invalid/table/nested-brackets-open.toml
  • tests/invalid/table/array-missing-bracket.toml
  • tests/invalid/table/append-with-dotted-keys-1.toml
  • tests/invalid/table/with-pound.toml
  • tests/invalid/table/quoted-no-close.toml
  • tests/invalid/table/empty.toml
  • tests/invalid/table/redefine.toml
  • tests/invalid/table/duplicate-key-dotted-table2.toml
  • tests/invalid/table/array-implicit.toml
  • tests/invalid/table/duplicate-table-array2.toml
  • tests/invalid/table/llbrace.toml
  • tests/invalid/table/append-with-dotted-keys-2.toml
  • tests/invalid/table/duplicate.toml
  • tests/invalid/table/array-empty.toml
  • tests/invalid/table/duplicate-key-dotted-table.toml
  • tests/invalid/table/empty-implicit-table.toml
  • tests/invalid/table/text-after-table.toml
  • tests/invalid/table/duplicate-key-table.toml
  • tests/invalid/key/duplicate-keys.toml
  • tests/invalid/key/after-table.toml
  • tests/invalid/key/multiline.toml
  • tests/invalid/key/without-value-2.toml
  • tests/invalid/key/dotted-redefine-table.toml
  • tests/invalid/key/escape.toml
  • tests/invalid/key/after-array.toml
  • tests/invalid/key/after-value.toml
  • tests/invalid/key/two-equals.toml
  • tests/invalid/key/start-dot.toml
  • tests/invalid/key/space.toml
  • tests/invalid/key/without-value-3.toml
  • tests/invalid/key/without-value-1.toml
  • tests/invalid/key/open-bracket.toml
  • tests/invalid/key/newline.toml
  • tests/invalid/key/quoted-unclosed-1.toml
  • tests/invalid/key/two-equals2.toml
  • tests/invalid/key/empty.toml
  • tests/invalid/key/no-eol.toml
  • tests/invalid/key/bare-invalid-character.toml
  • tests/invalid/key/two-equals3.toml
  • tests/invalid/key/partial-quoted.toml
  • tests/invalid/key/hash.toml
  • tests/invalid/key/duplicate.toml
  • tests/invalid/key/quoted-unclosed-2.toml
  • tests/invalid/key/single-open-bracket.toml
  • tests/invalid/key/start-bracket.toml
  • tests/invalid/key/special-character.toml
  • tests/invalid/key/without-value-4.toml
  • tests/invalid/bool/mixed-case.toml
  • tests/invalid/bool/just-f.toml
  • tests/invalid/bool/almost-false-with-extra.toml
  • tests/invalid/bool/almost-true-with-extra.toml
  • tests/invalid/bool/starting-same-false.toml
  • tests/invalid/bool/almost-false.toml
  • tests/invalid/bool/just-t.toml
  • tests/invalid/bool/almost-true.toml
  • tests/invalid/bool/wrong-case-true.toml
  • tests/invalid/bool/starting-same-true.toml
  • tests/invalid/bool/wrong-case-false.toml
  • tests/invalid/inline-table/add.toml
  • tests/invalid/inline-table/linebreak-3.toml
  • tests/invalid/inline-table/trailing-comma.toml
  • tests/invalid/inline-table/no-comma.toml
  • tests/invalid/inline-table/linebreak-1.toml
  • tests/invalid/inline-table/linebreak-4.toml
  • tests/invalid/inline-table/double-comma.toml
  • tests/invalid/inline-table/empty.toml
  • tests/invalid/inline-table/overwrite.toml
  • tests/invalid/inline-table/duplicate-key.toml
  • tests/invalid/inline-table/linebreak-2.toml
  • tests/invalid/encoding/bad-utf8-in-string.toml
  • tests/invalid/encoding/bom-not-at-start-1.toml
  • tests/invalid/encoding/utf16-bom.toml
  • tests/invalid/encoding/utf16.toml
  • tests/invalid/encoding/bad-utf8-at-end.toml
  • tests/invalid/encoding/bad-utf8-in-comment.toml
  • tests/invalid/encoding/bom-not-at-start-2.toml
  • tests/invalid/float/double-point-1.toml
  • tests/invalid/float/trailing-point.toml
  • tests/invalid/float/nan-incomplete-3.toml
  • tests/invalid/float/leading-point-plus.toml
  • tests/invalid/float/exp-double-us.toml
  • tests/invalid/float/leading-zero-plus.toml
  • tests/invalid/float/trailing-point-min.toml
  • tests/invalid/float/inf-incomplete-2.toml
  • tests/invalid/float/exp-trailing-us.toml
  • tests/invalid/float/inf_underscore.toml
  • tests/invalid/float/exp-leading-us.toml
  • tests/invalid/float/exp-double-e-1.toml
  • tests/invalid/float/nan-incomplete-1.toml
  • tests/invalid/float/exp-point-1.toml
  • tests/invalid/float/leading-point.toml
  • tests/invalid/float/leading-zero.toml
  • tests/invalid/float/trailing-point-plus.toml
  • tests/invalid/float/trailing-us-exp.toml
  • tests/invalid/float/leading-point-neg.toml
  • tests/invalid/float/exp-double-e-2.toml
  • tests/invalid/float/leading-us.toml
  • tests/invalid/float/leading-zero-neg.toml
  • tests/invalid/float/nan-incomplete-2.toml
  • tests/invalid/float/float.multi
  • tests/invalid/float/us-after-point.toml
  • tests/invalid/float/us-before-point.toml
  • tests/invalid/float/inf-incomplete-1.toml
  • tests/invalid/float/double-point-2.toml
  • tests/invalid/float/nan_underscore.toml
  • tests/invalid/float/trailing-us.toml
  • tests/invalid/float/exp-point-2.toml
  • tests/invalid/float/inf-incomplete-3.toml
  • tests/invalid/integer/trailing-us-oct.toml
  • tests/invalid/integer/invalid-oct.toml
  • tests/invalid/integer/negative-hex.toml
  • tests/invalid/integer/capital-oct.toml
  • tests/invalid/integer/double-sign-nex.toml
  • tests/invalid/integer/leading-us-bin.toml
  • tests/invalid/integer/leading-zero-2.toml
  • tests/invalid/integer/invalid-hex.toml
  • tests/invalid/integer/trailing-us-hex.toml
  • tests/invalid/integer/us-after-oct.toml
  • tests/invalid/integer/negative-bin.toml
  • tests/invalid/integer/positive-hex.toml
  • tests/invalid/integer/invalid-bin.toml
  • tests/invalid/integer/incomplete-bin.toml
  • tests/invalid/integer/positive-bin.toml
  • tests/invalid/integer/leading-us-hex.toml
  • tests/invalid/integer/us-after-hex.toml
  • tests/invalid/integer/leading-zero-3.toml
  • tests/invalid/integer/leading-zero-sign-3.toml
  • tests/invalid/integer/capital-hex.toml
  • tests/invalid/integer/leading-us-oct.toml
  • tests/invalid/integer/leading-us.toml
  • tests/invalid/integer/text-after-integer.toml
  • tests/invalid/integer/capital-bin.toml
  • tests/invalid/integer/double-sign-plus.toml
  • tests/invalid/integer/trailing-us-bin.toml
  • tests/invalid/integer/leading-zero-1.toml
  • tests/invalid/integer/incomplete-oct.toml
  • tests/invalid/integer/negative-oct.toml
  • tests/invalid/integer/leading-zero-sign-2.toml
  • tests/invalid/integer/incomplete-hex.toml
  • tests/invalid/integer/double-us.toml
  • tests/invalid/integer/trailing-us.toml
  • tests/invalid/integer/integer.multi
  • tests/invalid/integer/leading-zero-sign-1.toml
  • tests/invalid/integer/us-after-bin.toml
  • tests/invalid/integer/positive-oct.toml
  • tests/invalid/control/bare-vertical-tab.toml
  • tests/invalid/control/rawmulti-lf.toml
  • tests/invalid/control/rawstring-lf.toml
  • tests/invalid/control/multi-del.toml
  • tests/invalid/control/bare-cr.toml
  • tests/invalid/control/multi-lf.toml
  • tests/invalid/control/bare-formfeed.toml
  • tests/invalid/control/string-lf.toml
  • tests/invalid/control/multi-us.toml
  • tests/invalid/control/string-us.toml
  • tests/invalid/control/string-del.toml
  • tests/invalid/control/comment-del.toml
  • tests/invalid/control/comment-us.toml
  • tests/invalid/control/rawstring-del.toml
  • tests/invalid/control/rawmulti-us.toml
  • tests/invalid/control/rawstring-us.toml
  • tests/invalid/control/string-bs.toml
  • tests/invalid/control/bare-null.toml
  • tests/invalid/control/multi-null.toml
  • tests/invalid/control/string-null.toml
  • tests/invalid/control/rawmulti-null.toml
  • tests/invalid/control/rawstring-null.toml
  • tests/invalid/control/control.multi
  • tests/invalid/control/comment-null.toml
  • tests/invalid/control/comment-lf.toml
  • tests/invalid/control/rawmulti-del.toml
  • tests/invalid/control/comment-cr.toml
  • tests/invalid/datetime/no-secs.toml
  • tests/invalid/datetime/time-no-leads-2.toml
  • tests/invalid/datetime/second-over.toml
  • tests/invalid/datetime/month-under.toml
  • tests/invalid/datetime/no-leads.toml
  • tests/invalid/datetime/time-no-leads.toml
  • tests/invalid/datetime/minute-over.toml
  • tests/invalid/datetime/no-leads-with-milli.toml
  • tests/invalid/datetime/month-over.toml
  • tests/invalid/datetime/trailing-t.toml
  • tests/invalid/datetime/no-t.toml
  • tests/invalid/datetime/mday-over.toml
  • tests/invalid/datetime/hour-over.toml
  • tests/invalid/datetime/mday-under.toml
  • tests/invalid/array/missing-separator.toml
  • tests/invalid/array/no-close.toml
  • tests/invalid/array/no-close-table.toml
  • tests/invalid/array/extending-table.toml
  • tests/invalid/array/no-close-table-2.toml
  • tests/invalid/array/tables-1.toml
  • tests/invalid/array/double-comma-2.toml
  • tests/invalid/array/no-close-2.toml
  • tests/invalid/array/text-before-array-separator.toml
  • tests/invalid/array/text-in-array.toml
  • tests/invalid/array/tables-2.toml
  • tests/invalid/array/text-after-array-entries.toml
  • tests/invalid/array/double-comma-1.toml
  • tests/invalid/string/basic-multiline-unknown-escape.toml
  • tests/invalid/string/bad-codepoint.toml
  • tests/invalid/string/basic-out-of-range-unicode-escape-2.toml
  • tests/invalid/string/multiline-no-close.toml
  • tests/invalid/string/bad-multiline.toml
  • tests/invalid/string/basic-multiline-quotes.toml
  • tests/invalid/string/wrong-close.toml
  • tests/invalid/string/no-close.toml
  • tests/invalid/string/multiline-escape-space.toml
  • tests/invalid/string/bad-concat.toml
  • tests/invalid/string/text-after-string.toml
  • tests/invalid/string/bad-byte-escape.toml
  • tests/invalid/string/missing-quotes.toml
  • tests/invalid/string/literal-multiline-quotes-1.toml
  • tests/invalid/string/multiline-bad-escape-3.toml
  • tests/invalid/string/multiline-no-close-2.toml
  • tests/invalid/string/multiline-quotes-1.toml
  • tests/invalid/string/bad-uni-esc-5.toml
  • tests/invalid/string/multiline-bad-escape-2.toml
  • tests/invalid/string/basic-unknown-escape.toml
  • tests/invalid/string/bad-slash-escape.toml
  • tests/invalid/string/bad-escape-2.toml
  • tests/invalid/string/bad-uni-esc-1.toml
  • tests/invalid/string/basic-out-of-range-unicode-escape-1.toml
  • tests/invalid/string/bad-uni-esc-3.toml
  • tests/invalid/string/multiline-bad-escape-1.toml
  • tests/invalid/string/bad-uni-esc-2.toml
  • tests/invalid/string/basic-multiline-out-of-range-unicode-escape-2.toml
  • tests/invalid/string/literal-multiline-quotes-2.toml
  • tests/invalid/string/basic-multiline-out-of-range-unicode-escape-1.toml
  • tests/invalid/string/bad-uni-esc-4.toml
  • tests/invalid/string/basic-byte-escapes.toml
  • tests/invalid/string/bad-escape-1.toml
  • tests/.gitattributes
  • tests/valid/newline-crlf.toml
  • tests/valid/table/without-super.json
  • tests/valid/table/array-table-array.json
  • tests/valid/table/array-nest.json
  • tests/valid/table/array-table-array.toml
  • tests/valid/table/whitespace.json
  • tests/valid/table/whitespace.toml
  • tests/valid/table/empty.json
  • tests/valid/table/with-single-quotes.toml
  • tests/valid/table/array-many.toml
  • tests/valid/table/sub-empty.toml
  • tests/valid/table/keyword.toml
  • tests/valid/table/sub-empty.json
  • tests/valid/table/with-pound.toml
  • tests/valid/table/array-one.json
  • tests/valid/table/names.json
  • tests/valid/table/with-pound.json
  • tests/valid/table/array-many.json
  • tests/valid/table/without-super.toml
  • tests/valid/table/empty.toml
  • tests/valid/table/no-eol.toml
  • tests/valid/table/array-implicit.toml
  • tests/valid/table/array-one.toml
  • tests/valid/table/names.toml
  • tests/valid/table/with-literal-string.json
  • tests/valid/table/array-implicit.json
  • tests/valid/table/with-single-quotes.json
  • tests/valid/table/array-nest.toml
  • tests/valid/table/with-literal-string.toml
  • tests/valid/table/no-eol.json
  • tests/valid/table/keyword.json
  • tests/valid/key/special-word.json
  • tests/valid/key/special-chars.json
  • tests/valid/key/quoted-dots.json
  • tests/valid/key/case-sensitive.json
  • tests/valid/key/case-sensitive.toml
  • tests/valid/key/dotted.toml
  • tests/valid/key/empty.json
  • tests/valid/key/equals-nospace.toml
  • tests/valid/key/dotted.json
  • tests/valid/key/space.toml
  • tests/valid/key/numeric.json
  • tests/valid/key/special-word.toml
  • tests/valid/key/alphanum.json
  • tests/valid/key/numeric-dotted.toml
  • tests/valid/key/quoted-dots.toml
  • tests/valid/key/empty.toml
  • tests/valid/key/escapes.json
  • tests/valid/key/equals-nospace.json
  • tests/valid/key/special-chars.toml
  • tests/valid/key/space.json
  • tests/valid/key/escapes.toml
  • tests/valid/key/numeric.toml
  • tests/valid/key/numeric-dotted.json
  • tests/valid/key/alphanum.toml
  • tests/valid/newline-crlf.json
  • tests/valid/implicit-and-explicit-after.json
  • tests/valid/example.toml
  • tests/valid/implicit-and-explicit-before.json
  • tests/valid/implicit-and-explicit-after.toml
  • tests/valid/newline-lf.toml
  • tests/valid/spec-example-1.toml
  • tests/valid/bool/bool.toml
  • tests/valid/bool/bool.json
  • tests/valid/inline-table/multiline.toml
  • tests/valid/inline-table/multiline.json
  • tests/valid/inline-table/nest.toml
  • tests/valid/inline-table/empty.json
  • tests/valid/inline-table/key-dotted.json
  • tests/valid/inline-table/nest.json
  • tests/valid/inline-table/bool.toml
  • tests/valid/inline-table/bool.json
  • tests/valid/inline-table/empty.toml
  • tests/valid/inline-table/end-in-bool.toml
  • tests/valid/inline-table/inline-table.json
  • tests/valid/inline-table/array.toml
  • tests/valid/inline-table/inline-table.toml
  • tests/valid/inline-table/key-dotted.toml
  • tests/valid/inline-table/end-in-bool.json
  • tests/valid/inline-table/array.json
  • tests/valid/empty-file.toml
  • tests/valid/empty-file.json
  • tests/valid/implicit-groups.json
  • tests/valid/float/inf-and-nan.toml
  • tests/valid/float/zero.json
  • tests/valid/float/exponent.toml
  • tests/valid/float/float.toml
  • tests/valid/float/float.json
  • tests/valid/float/exponent.json
  • tests/valid/float/zero.toml
  • tests/valid/float/long.toml
  • tests/valid/float/underscore.toml
  • tests/valid/float/long.json
  • tests/valid/float/underscore.json
  • tests/valid/float/inf-and-nan.json
  • tests/valid/integer/literals.json
  • tests/valid/integer/zero.json
  • tests/valid/integer/integer.json
  • tests/valid/integer/zero.toml
  • tests/valid/integer/long.toml
  • tests/valid/integer/integer.toml
  • tests/valid/integer/underscore.toml
  • tests/valid/integer/literals.toml
  • tests/valid/integer/long.json
  • tests/valid/integer/underscore.json
  • tests/valid/implicit-groups.toml
  • tests/valid/newline-lf.json
  • tests/valid/comment/at-eof2.toml
  • tests/valid/comment/tricky.json
  • tests/valid/comment/at-eof.json
  • tests/valid/comment/at-eof.toml
  • tests/valid/comment/everywhere.json
  • tests/valid/comment/noeol.json
  • tests/valid/comment/tricky.toml
  • tests/valid/comment/at-eof2.json
  • tests/valid/comment/noeol.toml
  • tests/valid/comment/everywhere.toml
  • tests/valid/implicit-and-explicit-before.toml
  • tests/valid/example.json
  • tests/valid/spec-example-1-compact.toml
  • tests/valid/datetime/datetime.json
  • tests/valid/datetime/timezone.toml
  • tests/valid/datetime/milliseconds.json
  • tests/valid/datetime/local.toml
  • tests/valid/datetime/local-time.json
  • tests/valid/datetime/local-time.toml
  • tests/valid/datetime/local-date.toml
  • tests/valid/datetime/datetime.toml
  • tests/valid/datetime/local-date.json
  • tests/valid/datetime/local.json
  • tests/valid/datetime/timezone.json
  • tests/valid/datetime/milliseconds.toml
  • tests/valid/spec-example-1.json
  • tests/valid/spec-example-1-compact.json
  • tests/valid/array/mixed-string-table.json
  • tests/valid/array/mixed-int-string.toml
  • tests/valid/array/table-array-string-backslash.json
  • tests/valid/array/hetergeneous.json
  • tests/valid/array/nested-double.toml
  • tests/valid/array/string-quote-comma.json
  • tests/valid/array/strings.json
  • tests/valid/array/hetergeneous.toml
  • tests/valid/array/mixed-string-table.toml
  • tests/valid/array/nested-double.json
  • tests/valid/array/empty.json
  • tests/valid/array/nospaces.json
  • tests/valid/array/string-with-comma.json
  • tests/valid/array/bool.toml
  • tests/valid/array/mixed-int-array.toml
  • tests/valid/array/nested-inline-table.toml
  • tests/valid/array/string-quote-comma-2.json
  • tests/valid/array/nospaces.toml
  • tests/valid/array/bool.json
  • tests/valid/array/empty.toml
  • tests/valid/array/nested-inline-table.json
  • tests/valid/array/array.toml
  • tests/valid/array/nested.toml
  • tests/valid/array/strings.toml
  • tests/valid/array/mixed-int-float.toml
  • tests/valid/array/string-quote-comma.toml
  • tests/valid/array/mixed-int-float.json
  • tests/valid/array/string-quote-comma-2.toml
  • tests/valid/array/mixed-int-string.json
  • tests/valid/array/table-array-string-backslash.toml
  • tests/valid/array/mixed-int-array.json
  • tests/valid/array/string-with-comma.toml
  • tests/valid/array/nested.json
  • tests/valid/array/array.json
  • tests/valid/string/double-quote-escape.json
  • tests/valid/string/multiline.toml
  • tests/valid/string/multiline.json
  • tests/valid/string/nl.toml
  • tests/valid/string/escape-esc.json
  • tests/valid/string/raw.json
  • tests/valid/string/multiline-escaped-crlf.toml
  • tests/valid/string/multiline-escaped-crlf.json
  • tests/valid/string/empty.json
  • tests/valid/string/raw-multiline.toml
  • tests/valid/string/raw-multiline.json
  • tests/valid/string/escaped-escape.json
  • tests/valid/string/multiline-quotes.toml
  • tests/valid/string/unicode-escape.json
  • tests/valid/string/unicode-literal.json
  • tests/valid/string/with-pound.toml
  • tests/valid/string/multiline-quotes.json
  • tests/valid/string/with-pound.json
  • tests/valid/string/simple.json
  • tests/valid/string/empty.toml
  • tests/valid/string/escapes.json
  • tests/valid/string/escape-esc.toml
  • tests/valid/string/escape-tricky.json
  • tests/valid/string/double-quote-escape.toml
  • tests/valid/string/escaped-escape.toml
  • tests/valid/string/escapes.toml
  • tests/valid/string/nl.json
  • tests/valid/string/escape-tricky.toml
  • tests/valid/string/unicode-escape.toml
  • tests/valid/string/raw.toml
  • tests/valid/string/unicode-literal.toml
  • tests/valid/string/simple.toml
  • tests/fuzzing/id-000000,sig-06,src-000035,time-345,execs-551,op-havoc,rep-2
  • tests/fuzzing/id-000000,sig-06,src-000052+000007,time-701543,execs-28399,op-splice,rep-2
  • tests/fuzzing/id-000000,sig-06,src-000024,time-10060,execs-1850,op-havoc,rep-4
  • tests/COPYING
  • toml.dict
  • src/fuzz.zig
  • src/toml2json.zig
  • src/main.zig
  • src/parser.zig
  • src/serializer.zig
  • src/print_failing_tests.zig
  • src/integration_tests.zig
  • src/lexer.zig
  • README.md
  • flake.nix
  • LICENCE
  • .gitignore

History

Published On Tree @ Commit Size
v0.32 Sat, 28 Sep 2024 15:53:32 UTC Tree 223.728 KB
v0.31 Wed, 19 Jun 2024 17:20:50 UTC Tree 221.673 KB
v0.30 Tue, 31 Oct 2023 18:51:34 UTC Tree 219.775 KB
v0.29 Mon, 04 Sep 2023 09:58:38 UTC Tree 219.250 KB
v0.28 Wed, 23 Aug 2023 21:34:56 UTC Tree 181.004 KB
v0.27 Sun, 30 Jul 2023 11:57:28 UTC Tree 185.102 KB
v0.26 Sun, 09 Jul 2023 17:30:13 UTC Tree 185.102 KB
v0.25 Sat, 24 Jun 2023 11:34:44 UTC Tree 185.138 KB
v0.24 Sat, 24 Jun 2023 11:28:44 UTC Tree 185.136 KB
v0.23 Tue, 20 Jun 2023 18:10:56 UTC Tree 184.894 KB
v0.22 Mon, 24 Apr 2023 21:58:02 UTC Tree 184.891 KB
v0.21 Fri, 21 Apr 2023 21:01:34 UTC Tree 184.895 KB
v0.20 Sun, 08 Jan 2023 12:24:37 UTC Tree 183.792 KB
v0.19 Thu, 22 Dec 2022 14:11:04 UTC Tree 183.357 KB
v0.18 Thu, 22 Dec 2022 13:00:33 UTC Tree 183.335 KB
v0.17 Thu, 22 Dec 2022 11:19:56 UTC Tree 181.865 KB
v0.16 Sun, 27 Nov 2022 18:56:58 UTC Tree 182.203 KB
v0.15 Sun, 27 Nov 2022 17:19:59 UTC Tree 181.316 KB
v0.14 Thu, 24 Nov 2022 20:03:21 UTC Tree 181.315 KB
v0.13 Thu, 24 Nov 2022 20:01:32 UTC Tree 181.315 KB
v0.12 Thu, 24 Nov 2022 19:35:05 UTC Tree 180.156 KB
v0.11 Thu, 24 Nov 2022 19:27:33 UTC Tree 179.889 KB
v0.10 Mon, 21 Nov 2022 20:42:58 UTC Tree 177.556 KB
v0.9 Mon, 21 Nov 2022 20:19:10 UTC Tree 176.745 KB
v0.8 Sun, 20 Nov 2022 23:17:39 UTC Tree 174.276 KB
v0.7 Sun, 20 Nov 2022 23:16:32 UTC Tree 174.278 KB
v0.6 Sun, 20 Nov 2022 21:50:24 UTC Tree 173.939 KB
v0.5 Thu, 17 Nov 2022 21:35:30 UTC Tree 172.458 KB
v0.4 Thu, 17 Nov 2022 21:28:14 UTC Tree 172.448 KB
v0.3 Thu, 17 Nov 2022 21:26:06 UTC Tree 172.033 KB
v0.2 Thu, 17 Nov 2022 20:52:33 UTC Tree 169.804 KB
v0.1 Thu, 17 Nov 2022 20:45:32 UTC Tree 167.594 KB