aboutsummaryrefslogtreecommitdiff
path: root/std/fmt.zig
diff options
context:
space:
mode:
Diffstat (limited to 'std/fmt.zig')
-rw-r--r--std/fmt.zig33
1 files changed, 20 insertions, 13 deletions
diff --git a/std/fmt.zig b/std/fmt.zig
index d1b91b15f8..a42233cac2 100644
--- a/std/fmt.zig
+++ b/std/fmt.zig
@@ -2,6 +2,7 @@ const math = @import("math.zig");
const debug = @import("debug.zig");
const assert = debug.assert;
const mem = @import("mem.zig");
+const builtin = @import("builtin");
const max_f64_digits = 65;
const max_int_digits = 65;
@@ -174,19 +175,25 @@ pub fn format(context: var, output: fn(@typeOf(context), []const u8)->bool,
pub fn formatValue(value: var, context: var, output: fn(@typeOf(context), []const u8)->bool) -> bool {
const T = @typeOf(value);
- if (@isInteger(T)) {
- return formatInt(value, 10, false, 0, context, output);
- } else if (@isFloat(T)) {
- @compileError("TODO implement formatFloat");
- } else if (@canImplicitCast([]const u8, value)) {
- const casted_value = ([]const u8)(value);
- return output(context, casted_value);
- } else if (T == void) {
- return output(context, "void");
- } else if (T == bool) {
- return output(context, if (value) "true" else "false");
- } else {
- @compileError("Unable to format type '" ++ @typeName(T) ++ "'");
+ switch (@typeId(T)) {
+ builtin.TypeId.Int => {
+ return formatInt(value, 10, false, 0, context, output);
+ },
+ builtin.TypeId.Float => {
+ @compileError("TODO implement formatFloat");
+ },
+ builtin.TypeId.Void => {
+ return output(context, "void");
+ },
+ builtin.TypeId.Bool => {
+ return output(context, if (value) "true" else "false");
+ },
+ else => if (@canImplicitCast([]const u8, value)) {
+ const casted_value = ([]const u8)(value);
+ return output(context, casted_value);
+ } else {
+ @compileError("Unable to format type '" ++ @typeName(T) ++ "'");
+ },
}
}