commit
57b78fff73
|
@ -362,12 +362,21 @@ pub fn formatType(
|
|||
if (enumInfo.is_exhaustive) {
|
||||
try out_stream.writeAll(".");
|
||||
try out_stream.writeAll(@tagName(value));
|
||||
} else {
|
||||
// TODO: when @tagName works on exhaustive enums print known enum strings
|
||||
try out_stream.writeAll("(");
|
||||
try formatType(@enumToInt(value), fmt, options, out_stream, max_depth);
|
||||
try out_stream.writeAll(")");
|
||||
return;
|
||||
}
|
||||
|
||||
// Use @tagName only if value is one of known fields
|
||||
inline for (enumInfo.fields) |enumField| {
|
||||
if (@enumToInt(value) == enumField.value) {
|
||||
try out_stream.writeAll(".");
|
||||
try out_stream.writeAll(@tagName(value));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
try out_stream.writeAll("(");
|
||||
try formatType(@enumToInt(value), fmt, options, out_stream, max_depth);
|
||||
try out_stream.writeAll(")");
|
||||
},
|
||||
.Union => {
|
||||
try out_stream.writeAll(@typeName(T));
|
||||
|
@ -1308,6 +1317,8 @@ test "enum" {
|
|||
const value = Enum.Two;
|
||||
try testFmt("enum: Enum.Two\n", "enum: {}\n", .{value});
|
||||
try testFmt("enum: Enum.Two\n", "enum: {}\n", .{&value});
|
||||
try testFmt("enum: Enum.One\n", "enum: {x}\n", .{Enum.One});
|
||||
try testFmt("enum: Enum.Two\n", "enum: {X}\n", .{Enum.Two});
|
||||
}
|
||||
|
||||
test "non-exhaustive enum" {
|
||||
|
@ -1316,11 +1327,12 @@ test "non-exhaustive enum" {
|
|||
Two = 0xbeef,
|
||||
_,
|
||||
};
|
||||
try testFmt("enum: Enum(15)\n", "enum: {}\n", .{Enum.One});
|
||||
try testFmt("enum: Enum(48879)\n", "enum: {}\n", .{Enum.Two});
|
||||
try testFmt("enum: Enum.One\n", "enum: {}\n", .{Enum.One});
|
||||
try testFmt("enum: Enum.Two\n", "enum: {}\n", .{Enum.Two});
|
||||
try testFmt("enum: Enum(4660)\n", "enum: {}\n", .{@intToEnum(Enum, 0x1234)});
|
||||
try testFmt("enum: Enum(f)\n", "enum: {x}\n", .{Enum.One});
|
||||
try testFmt("enum: Enum(beef)\n", "enum: {x}\n", .{Enum.Two});
|
||||
try testFmt("enum: Enum.One\n", "enum: {x}\n", .{Enum.One});
|
||||
try testFmt("enum: Enum.Two\n", "enum: {x}\n", .{Enum.Two});
|
||||
try testFmt("enum: Enum.Two\n", "enum: {X}\n", .{Enum.Two});
|
||||
try testFmt("enum: Enum(1234)\n", "enum: {x}\n", .{@intToEnum(Enum, 0x1234)});
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue