zaye/example/main.zig

54 lines
1.5 KiB
Zig

const std = @import("std");
const yaml = @import("yaml");
pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
const allocator = gpa.allocator();
const slurp = std.fs.cwd().readFileAlloc(
allocator,
"test.yaml",
1024 * 1024 * 1024,
) catch |err| {
std.debug.print("couldn't open test.yaml in the cwd\n", .{});
return err;
};
defer allocator.free(slurp);
var diag = yaml.ParseDiagnostic{ .message = "?????" };
const doc = yaml.Document.fromString(allocator, slurp, &diag) catch |err| {
std.debug.print(
"Failed to parse line: {d}, col: {d}: {s}\n",
.{ diag.line, diag.col, diag.message },
);
return err;
};
defer doc.deinit();
std.debug.print("\n-----\n\n", .{});
dump(doc.root);
}
fn dump(val: yaml.Value) void {
switch (val) {
.scalar => |str| std.debug.print("scalar: {s}\n", .{str}),
.list => |list| {
std.debug.print("list: \n", .{});
for (list) |item| dump(item);
std.debug.print("end list\n", .{});
},
.map => |map| {
std.debug.print("map: \n", .{});
var iter = map.iterator();
while (iter.next()) |entry| {
std.debug.print("key: {s}\n", .{entry.key_ptr.*});
dump(entry.value_ptr.*);
}
std.debug.print("end map\n", .{});
},
}
}