https://github.com/sam701/zig-toml
Zig TOML (v1.0.0) parser
https://github.com/sam701/zig-toml
parser toml zig-package ziglang
Last synced: 2 months ago
JSON representation
Zig TOML (v1.0.0) parser
- Host: GitHub
- URL: https://github.com/sam701/zig-toml
- Owner: sam701
- License: mit
- Created: 2022-12-20T21:06:03.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2025-03-15T18:23:48.000Z (4 months ago)
- Last Synced: 2025-05-08T22:51:45.668Z (2 months ago)
- Topics: parser, toml, zig-package, ziglang
- Language: Zig
- Homepage:
- Size: 133 KB
- Stars: 51
- Watchers: 2
- Forks: 21
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-zig - sam701/zig-toml
- awesome-zig - zig-toml🗒️An LL TOML parser that parses into Zig structs
README
# zig-toml
Zig [TOML v1.0.0](https://toml.io/en/v1.0.0) parser.
This is a top-down LL parser that parses directly into Zig structs.
## Features
* TOML Syntax
* [x] Integers, hexadecimal, octal, and binary numbers
* [x] Floats
* [x] Booleans
* [x] Comments
* [x] Arrays
* [x] Tables
* [x] Array of Tables
* [x] Inline Table
* [x] Single-line strings
* [x] String escapes (also unicode)
* [x] Multi-line strings
* [x] Multi-line string leading space trimming
* [x] Trailing backslash in multi-line strings
* [x] Date, time, date-time, time offset
* Struct mapping
* [x] Mapping to structs
* [x] Mapping to enums
* [x] Mapping to slices
* [x] Mapping to arrays
* [x] Mapping to pointers
* [x] Mapping to integer and floats with lower bit number than defined by TOML, i.e. `i16`, `f32`.
* [x] Mapping to optional fields
* [x] Mapping to HashMaps
* [ ] Serialization
* [x] Basic types like integers, floating points, strings, booleans etc.
* [x] Arrays
* [x] Top level tables
* [x] Sub tables
* [x] Pointers
* [x] Date, time, DateTime, time offset
* [x] Enums
* [x] Unions## Using with the Zig package manager
Add `zig-toml` to your `build.zig.zon`
```
# For zig-master
zig fetch --save git+https://github.com/sam701/zig-toml# For zig 0.13
zig fetch --save git+https://github.com/sam701/zig-toml#last-zig-0.13
```## Example
See [`example1.zig`](./examples/example1.zig) for the complete code that parses [`example.toml`](./examples/example1.toml)Run it with `zig build examples`
```zig
// ....const Address = struct {
port: i64,
host: []const u8,
};const Config = struct {
master: bool,
expires_at: toml.DateTime,
description: []const u8,local: *Address,
peers: []const Address,
};pub fn main() anyerror!void {
var parser = toml.Parser(Config).init(allocator);
defer parser.deinit();var result = try parser.parseFile("./examples/example1.toml");
defer result.deinit();const config = result.value;
std.debug.print("{s}\nlocal address: {s}:{}\n", .{ config.description, config.local.host, config.local.port });
std.debug.print("peer0: {s}:{}\n", .{ config.peers[0].host, config.peers[0].port });
}
```## Error Handling
TODO## License
MIT