summaryrefslogtreecommitdiff
path: root/dump.zig
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-07-02 21:56:01 -0300
committerGabriel Schneider <[email protected]>2026-08-01 15:02:07 -0300
commit589269c0b3ca74a29f5889fa6e781e59cef7efdb (patch)
treeecd2ce3060d06353f3b6302e70abf784295ff40f /dump.zig
parent81992cc92743a98066ee1a9025bc74f91cf0e967 (diff)
downloadpardes-589269c0b3ca74a29f5889fa6e781e59cef7efdb.tar.gz
pardes-589269c0b3ca74a29f5889fa6e781e59cef7efdb.zip
wasm replay ui
Diffstat (limited to 'dump.zig')
-rw-r--r--dump.zig20
1 files changed, 19 insertions, 1 deletions
diff --git a/dump.zig b/dump.zig
index 5a55f04f..9c1dceec 100644
--- a/dump.zig
+++ b/dump.zig
@@ -1,4 +1,5 @@
const std = @import("std");
+const builtin = @import("builtin");
pub const default_path = "/tmp/pardes-dump.zon";
pub const magic = "pardes-dump";
@@ -104,13 +105,30 @@ pub fn writeFile(io: std.Io, gpa: std.mem.Allocator, path: []const u8, state: St
pub fn readFile(io: std.Io, gpa: std.mem.Allocator, path: []const u8) !State {
const bytes = try std.Io.Dir.cwd().readFileAlloc(io, path, gpa, .limited(64 * 1024 * 1024));
defer gpa.free(bytes);
+ return readZon(gpa, bytes, path);
+}
+
+pub fn readZon(gpa: std.mem.Allocator, bytes: []const u8, label: []const u8) !State {
const source = try gpa.dupeZ(u8, bytes);
defer gpa.free(source);
+ return readZonZ(gpa, source, label);
+}
+
+pub fn readZonZ(gpa: std.mem.Allocator, source: [:0]const u8, label: []const u8) !State {
+ if (builtin.os.tag == .emscripten) {
+ const state = std.zon.parse.fromSliceAlloc(State, gpa, source, null, .{}) catch |err| {
+ std.log.err("parse dump {s}: {s}", .{ label, @errorName(err) });
+ return err;
+ };
+ errdefer std.zon.parse.free(gpa, state);
+ try validate(state);
+ return state;
+ }
var diag: std.zon.parse.Diagnostics = .{};
defer diag.deinit(gpa);
const state = std.zon.parse.fromSliceAlloc(State, gpa, source, &diag, .{}) catch |err| {
- std.log.err("parse dump {s}: {f}", .{ path, diag });
+ std.log.err("parse dump {s}: {f}", .{ label, diag });
return err;
};
errdefer std.zon.parse.free(gpa, state);