authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-05-23 18:38:41-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-05-23 18:38:41-04:00
log0065eb7c80c2bb68585e42b87131f374e1d3fcbc
treea211a07f6584e25df8f2e4dd0d50fa18b62f5250
parentd8d45908fa6c572c661ba51132da87a3bc10c640

std.fmt can print nullables, errors, and error unions


1 files changed, 46 insertions(+), 0 deletions(-)

std/fmt.zig+46
...@@ -188,6 +188,25 @@ pub fn formatValue(value: var, context: var, output: fn(@typeOf(context), []cons...@@ -188,6 +188,25 @@ pub fn formatValue(value: var, context: var, output: fn(@typeOf(context), []cons
188 builtin.TypeId.Bool => {188 builtin.TypeId.Bool => {
189 return output(context, if (value) "true" else "false");189 return output(context, if (value) "true" else "false");
190 },190 },
191 builtin.TypeId.Nullable => {
192 if (value) |payload| {
193 return formatValue(payload, context, output);
194 } else {
195 return output(context, "null");
196 }
197 },
198 builtin.TypeId.ErrorUnion => {
199 if (value) |payload| {
200 return formatValue(payload, context, output);
201 } else |err| {
202 return formatValue(err, context, output);
203 }
204 },
205 builtin.TypeId.Error => {
206 if (!output(context, "error."))
207 return false;
208 return output(context, @errorName(value));
209 },
191 else => if (@canImplicitCast([]const u8, value)) {210 else => if (@canImplicitCast([]const u8, value)) {
192 const casted_value = ([]const u8)(value);211 const casted_value = ([]const u8)(value);
193 return output(context, casted_value);212 return output(context, casted_value);
...@@ -407,3 +426,30 @@ test "parse unsigned comptime" {...@@ -407,3 +426,30 @@ test "parse unsigned comptime" {
407 assert(%%parseUnsigned(usize, "2", 10) == 2);426 assert(%%parseUnsigned(usize, "2", 10) == 2);
408 }427 }
409}428}
429
430test "fmt.format" {
431 {
432 var buf1: [32]u8 = undefined;
433 const value: ?i32 = 1234;
434 const result = bufPrint(buf1[0..], "nullable: {}\n", value);
435 assert(mem.eql(u8, result, "nullable: 1234\n"));
436 }
437 {
438 var buf1: [32]u8 = undefined;
439 const value: ?i32 = null;
440 const result = bufPrint(buf1[0..], "nullable: {}\n", value);
441 assert(mem.eql(u8, result, "nullable: null\n"));
442 }
443 {
444 var buf1: [32]u8 = undefined;
445 const value: %i32 = 1234;
446 const result = bufPrint(buf1[0..], "error union: {}\n", value);
447 assert(mem.eql(u8, result, "error union: 1234\n"));
448 }
449 {
450 var buf1: [32]u8 = undefined;
451 const value: %i32 = error.InvalidChar;
452 const result = bufPrint(buf1[0..], "error union: {}\n", value);
453 assert(mem.eql(u8, result, "error union: error.InvalidChar\n"));
454 }
455}