| ... | ... | @@ -188,6 +188,25 @@ pub fn formatValue(value: var, context: var, output: fn(@typeOf(context), []cons |
| 188 | 188 | builtin.TypeId.Bool => { |
| 189 | 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 | 210 | else => if (@canImplicitCast([]const u8, value)) { |
| 192 | 211 | const casted_value = ([]const u8)(value); |
| 193 | 212 | return output(context, casted_value); |
| ... | ... | @@ -407,3 +426,30 @@ test "parse unsigned comptime" { |
| 407 | 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 | } |