Commit d34201c849

Philipp Lühmann <philipp@luehmann.dev>
2023-08-09 01:26:46
std.json: stringify enum literals (#16742)
1 parent 36c57c3
Changed files (2)
lib/std/json/stringify.zig
@@ -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);
                     }
lib/std/json/stringify_test.zig
@@ -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,