authorgravatar for quae@daurnimator.comdaurnimator <quae@daurnimator.com> 2020-01-31 21:18:20+11:00
committergravatar for quae@daurnimator.comdaurnimator <quae@daurnimator.com> 2020-01-31 22:33:56+11:00
loga351350b88980038c0c509d2d3d5cb6941a74fbf
tree21239e2fa0058fa4c6b98298a591c9f2c893ba9d
parentb9f720365c0ad20420ead337c1746b8f0a5da649
signature Commit is signed but in an unrecognized format.

std: format non-exhaustive enums


1 files changed, 10 insertions(+), 3 deletions(-)

lib/std/fmt.zig+10-3
...@@ -365,14 +365,21 @@ pub fn formatType(...@@ -365,14 +365,21 @@ pub fn formatType(
365 try output(context, "error.");365 try output(context, "error.");
366 return output(context, @errorName(value));366 return output(context, @errorName(value));
367 },367 },
368 .Enum => {368 .Enum => |enumInfo| {
369 if (comptime std.meta.trait.hasFn("format")(T)) {369 if (comptime std.meta.trait.hasFn("format")(T)) {
370 return value.format(fmt, options, context, Errors, output);370 return value.format(fmt, options, context, Errors, output);
371 }371 }
372372
373 try output(context, @typeName(T));373 try output(context, @typeName(T));
374 try output(context, ".");374 if (enumInfo.is_exhaustive) {
375 return formatType(@tagName(value), "", options, context, Errors, output, max_depth);375 try output(context, ".");
376 return formatType(@tagName(value), "", options, context, Errors, output, max_depth);
377 } else {
378 // TODO: when @tagName works on exhaustive enums print known enum strings
379 try output(context, "(");
380 try formatType(@enumToInt(value), "", options, context, Errors, output, max_depth);
381 try output(context, ")");
382 }
376 },383 },
377 .Union => {384 .Union => {
378 if (comptime std.meta.trait.hasFn("format")(T)) {385 if (comptime std.meta.trait.hasFn("format")(T)) {