Skip to content

Commit 1c6d6d2

Browse files
author
Benjamin Feng
committed
Exhaustive enums
1 parent ab19af4 commit 1c6d6d2

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

lib/std/fmtgen.zig

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -420,10 +420,17 @@ pub fn formatType(
420420
suspend generator.yield(@frame(), @errorName(value));
421421
return;
422422
},
423-
.Enum => {
424-
suspend generator.yield(@frame(), @typeName(T) ++ ".");
425-
suspend generator.yield(@frame(), @tagName(value));
426-
return;
423+
.Enum => |enumInfo| {
424+
suspend generator.yield(@frame(), @typeName(T));
425+
if (enumInfo.is_exhaustive) {
426+
suspend generator.yield(@frame(), ".");
427+
return formatType(@tagName(value), fmt, options, generator, max_depth);
428+
} else {
429+
// TODO: when @tagName works on exhaustive enums print known enum strings
430+
suspend generator.yield(@frame(), "(");
431+
formatType(@enumToInt(value), fmt, options, generator, max_depth);
432+
suspend generator.yield(@frame(), ")");
433+
}
427434
},
428435
.Union => |union_info| {
429436
if (union_info.tag_type) |UnionTagType| {

0 commit comments

Comments
 (0)