aboutsummaryrefslogtreecommitdiff
path: root/lib/std/json.zig
diff options
context:
space:
mode:
authorMeghan Denny <hello@nektro.net>2022-01-16 23:38:08 -0800
committerJakub Konka <kubkon@jakubkonka.com>2022-01-17 12:32:02 +0100
commit0d0f277954e8809ac537d11ff536639aed8f2724 (patch)
treead3749963859c1850fedf0800d5478a42c5cd8e6 /lib/std/json.zig
parentf72a0a290735636775f83eaebf689357bee50778 (diff)
downloadzig-0d0f277954e8809ac537d11ff536639aed8f2724.tar.gz
zig-0d0f277954e8809ac537d11ff536639aed8f2724.zip
std: add json.stringifyAlloc
Diffstat (limited to 'lib/std/json.zig')
-rw-r--r--lib/std/json.zig20
1 files changed, 20 insertions, 0 deletions
diff --git a/lib/std/json.zig b/lib/std/json.zig
index 658fec6b79..4009bf9c7f 100644
--- a/lib/std/json.zig
+++ b/lib/std/json.zig
@@ -3333,3 +3333,23 @@ test "stringify null optional fields" {
.{ .allocator = std.testing.allocator },
));
}
+
+// Same as `stringify` but accepts an Allocator and stores result in dynamically allocated memory instead of using a Writer.
+// Caller owns returned memory.
+pub fn stringifyAlloc(allocator: std.mem.Allocator, value: anytype, options: StringifyOptions) ![]const u8 {
+ var list = std.ArrayList(u8).init(allocator);
+ errdefer list.deinit();
+ try stringify(value, options, list.writer());
+ return list.toOwnedSlice();
+}
+
+test "stringify alloc" {
+ const allocator = std.testing.allocator;
+ const expected =
+ \\{"foo":"bar","answer":42,"my_friend":"sammy"}
+ ;
+ const actual = try stringifyAlloc(allocator, .{ .foo = "bar", .answer = 42, .my_friend = "sammy" }, .{});
+ defer allocator.free(actual);
+
+ try std.testing.expectEqualStrings(expected, actual);
+}