authorgravatar for sebastiankeller@fastmail.netSebastian Keller <sebastiankeller@fastmail.net> 2019-10-24 14:23:36+02:00
committergravatar for sebastiankeller@fastmail.netSebastian Keller <sebastiankeller@fastmail.net> 2019-10-24 14:23:36+02:00
logb82b6a70933fd6ba3ec942811bb0171e3414632e
treee2c9879b692bb54b6003b0d3982a8fb42a928b4f
parent345042ecbc7fb645fd17b69df4e57ffefa5be5a5

Added 'writeJson' to write_stream.zig:

Small addition to make writing a json value easier

1 files changed, 28 insertions(+), 0 deletions(-)

lib/std/json/write_stream.zig+28
...@@ -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 }
199199
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);