aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/jv/parse.zig
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-01-31 10:53:41 +0900
committernsfisis <nsfisis@gmail.com>2026-01-31 10:53:43 +0900
commit6be43138338fbe4623c1cd62cf71138873af3a7a (patch)
tree6b899dc4861ed3ff8de73b0d36eed4ea023fed38 /src/jv/parse.zig
parentfda13fefa083f9cc6489d55d21aab8ca0300e783 (diff)
downloadzgjq-6be43138338fbe4623c1cd62cf71138873af3a7a.tar.gz
zgjq-6be43138338fbe4623c1cd62cf71138873af3a7a.tar.zst
zgjq-6be43138338fbe4623c1cd62cf71138873af3a7a.zip
refactor: wrap std.json.* types
Diffstat (limited to 'src/jv/parse.zig')
-rw-r--r--src/jv/parse.zig22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/jv/parse.zig b/src/jv/parse.zig
index c1d35fc..dc3fcef 100644
--- a/src/jv/parse.zig
+++ b/src/jv/parse.zig
@@ -1,6 +1,24 @@
const std = @import("std");
const Value = @import("./value.zig").Value;
-pub fn parse(allocator: std.mem.Allocator, input: []const u8) !std.json.Parsed(Value) {
- return try std.json.parseFromSlice(Value, allocator, input, .{});
+pub const Parsed = struct {
+ value: Value,
+ arena: *std.heap.ArenaAllocator,
+ allocator: std.mem.Allocator,
+
+ pub fn deinit(self: *const Parsed) void {
+ const arena = self.arena;
+ const allocator = self.allocator;
+ arena.deinit();
+ allocator.destroy(arena);
+ }
+};
+
+pub fn parse(allocator: std.mem.Allocator, input: []const u8) !Parsed {
+ const internal = try std.json.parseFromSlice(std.json.Value, allocator, input, .{});
+ return .{
+ .value = .{ ._internal = internal.value },
+ .arena = internal.arena,
+ .allocator = allocator,
+ };
}