feat: add support for json objects and arrays to writeJsonValue

This commit is contained in:
CJ van den Berg 2026-03-12 21:06:15 +01:00
parent 3d7e3f82e2
commit 45277e05a0
Signed by: neurocyte
GPG key ID: 8EB1E1BB660E3FB9

View file

@ -1427,12 +1427,22 @@ pub fn toJsonOptsAlloc(a: std.mem.Allocator, cbor_buf: []const u8, opts: std.jso
} }
pub fn writeJsonValue(writer: *Io.Writer, value: json.Value) !void { pub fn writeJsonValue(writer: *Io.Writer, value: json.Value) !void {
try switch (value) { switch (value) {
.array => unreachable, .null => try writeNull(writer),
.object => unreachable, .array => |arr| {
.null => writeNull(writer), try writeArrayHeader(writer, arr.items.len);
inline else => |v| writeValue(writer, v), for (arr.items) |item| try writeJsonValue(writer, item);
}; },
.object => |obj| {
try writeMapHeader(writer, obj.count());
var it = obj.iterator();
while (it.next()) |entry| {
try writeString(writer, entry.key_ptr.*);
try writeJsonValue(writer, entry.value_ptr.*);
}
},
inline else => |v| try writeValue(writer, v),
}
} }
fn jsonScanUntil(writer: *Io.Writer, scanner: *json.Scanner, end_token: anytype, allocator: std.mem.Allocator) (JsonDecodeError || Io.Writer.Error)!usize { fn jsonScanUntil(writer: *Io.Writer, scanner: *json.Scanner, end_token: anytype, allocator: std.mem.Allocator) (JsonDecodeError || Io.Writer.Error)!usize {