Commit b82b6a7093

Sebastian Keller <sebastiankeller@fastmail.net>
2019-10-24 14:23:36
Added 'writeJson' to write_stream.zig:
Small addition to make writing a json value easier
1 parent 345042e
Changed files (1)
lib
lib/std/json/write_stream.zig
@@ -197,6 +197,34 @@ pub fn WriteStream(comptime OutStream: type, comptime max_depth: usize) type {
             try self.stream.writeByte('"');
         }
 
+        /// Writes the complete json into the output stream
+        pub fn writeJson(self: *Self, json: std.json.Value) std.os.WriteError!void {
+            switch (json) {
+                std.json.Value.Null => try self.emitNull(),
+                std.json.Value.Bool => |inner| try self.emitBool(inner),
+                std.json.Value.Integer => |inner| try self.emitNumber(inner),
+                std.json.Value.Float => |inner| try self.emitNumber(inner),
+                std.json.Value.String => |inner| try self.emitString(inner),
+                std.json.Value.Array => |inner| {
+                    try self.beginArray();
+                    for (inner.toSliceConst()) |elem| {
+                        try self.arrayElem();
+                        try self.writeJson(elem);
+                    }
+                    try self.endArray();
+                },
+                std.json.Value.Object => |inner| {
+                    try self.beginObject();
+                    var it = inner.iterator();
+                    while (it.next()) |entry| {
+                        try self.objectField(entry.key);
+                        try self.writeJson(entry.value);
+                    }
+                    try self.endObject();
+                },
+            }
+        }
+
         fn indent(self: *Self) !void {
             assert(self.state_index >= 1);
             try self.stream.write(self.newline);