| ... | @@ -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 | |
| | 430 | test "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 | } |