aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/jv/parse.zig
diff options
context:
space:
mode:
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,
+ };
}