std.json: stringify enum literals (#16742)

This commit is contained in:
Philipp Lühmann 2023-08-09 01:26:46 +02:00 committed by GitHub
parent 36c57c3ba1
commit d34201c849
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 1 deletions

View File

@ -181,6 +181,7 @@ pub fn writeStreamArbitraryDepth(
/// * If the union declares a method `pub fn jsonStringify(self: *@This(), jw: anytype) !void`, it is called to do the serialization instead of the default behavior. The given `jw` is a pointer to this `WriteStream`.
/// * Zig `enum` -> JSON string naming the active tag.
/// * If the enum declares a method `pub fn jsonStringify(self: *@This(), jw: anytype) !void`, it is called to do the serialization instead of the default behavior. The given `jw` is a pointer to this `WriteStream`.
/// * Zig untyped enum literal -> JSON string naming the active tag.
/// * Zig error -> JSON string naming the error.
/// * Zig `*T` -> the rendering of `T`. Note there is no guard against circular-reference infinite recursion.
///
@ -449,7 +450,7 @@ pub fn WriteStream(
return try self.write(null);
}
},
.Enum => {
.Enum, .EnumLiteral => {
if (comptime std.meta.trait.hasFn("jsonStringify")(T)) {
return value.jsonStringify(self);
}

View File

@ -172,6 +172,11 @@ test "stringify enums" {
try testStringify("\"bar\"", E.bar, .{});
}
test "stringify enum literals" {
try testStringify("\"foo\"", .foo, .{});
try testStringify("\"bar\"", .bar, .{});
}
test "stringify tagged unions" {
const T = union(enum) {
nothing,