diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-01-31 10:53:41 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-01-31 10:53:43 +0900 |
| commit | 6be43138338fbe4623c1cd62cf71138873af3a7a (patch) | |
| tree | 6b899dc4861ed3ff8de73b0d36eed4ea023fed38 /src/jv/parse.zig | |
| parent | fda13fefa083f9cc6489d55d21aab8ca0300e783 (diff) | |
| download | zgjq-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.zig | 22 |
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, + }; } |
