| ... | @@ -197,6 +197,34 @@ pub fn WriteStream(comptime OutStream: type, comptime max_depth: usize) type { | ... | @@ -197,6 +197,34 @@ pub fn WriteStream(comptime OutStream: type, comptime max_depth: usize) type { |
| 197 | try self.stream.writeByte('"'); | 197 | try self.stream.writeByte('"'); |
| 198 | } | 198 | } |
| 199 | | 199 | |
| | 200 | /// Writes the complete json into the output stream |
| | 201 | pub fn writeJson(self: *Self, json: std.json.Value) std.os.WriteError!void { |
| | 202 | switch (json) { |
| | 203 | std.json.Value.Null => try self.emitNull(), |
| | 204 | std.json.Value.Bool => |inner| try self.emitBool(inner), |
| | 205 | std.json.Value.Integer => |inner| try self.emitNumber(inner), |
| | 206 | std.json.Value.Float => |inner| try self.emitNumber(inner), |
| | 207 | std.json.Value.String => |inner| try self.emitString(inner), |
| | 208 | std.json.Value.Array => |inner| { |
| | 209 | try self.beginArray(); |
| | 210 | for (inner.toSliceConst()) |elem| { |
| | 211 | try self.arrayElem(); |
| | 212 | try self.writeJson(elem); |
| | 213 | } |
| | 214 | try self.endArray(); |
| | 215 | }, |
| | 216 | std.json.Value.Object => |inner| { |
| | 217 | try self.beginObject(); |
| | 218 | var it = inner.iterator(); |
| | 219 | while (it.next()) |entry| { |
| | 220 | try self.objectField(entry.key); |
| | 221 | try self.writeJson(entry.value); |
| | 222 | } |
| | 223 | try self.endObject(); |
| | 224 | }, |
| | 225 | } |
| | 226 | } |
| | 227 | |
| 200 | fn indent(self: *Self) !void { | 228 | fn indent(self: *Self) !void { |
| 201 | assert(self.state_index >= 1); | 229 | assert(self.state_index >= 1); |
| 202 | try self.stream.write(self.newline); | 230 | try self.stream.write(self.newline); |