const Writer = struct { pub fn printValue(self: *Writer, value: anytype) !void { switch (@typeInfo(@TypeOf(value))) { .int => { return self.writeInt(value); }, .float => { return self.writeFloat(value); }, .pointer => { return self.write(value); }, else => { @compileError("Unable to print type '" ++ @typeName(@TypeOf(value)) ++ "'"); }, } } fn write(self: *Writer, value: []const u8) !void { _ = self; _ = value; } fn writeInt(self: *Writer, value: anytype) !void { _ = self; _ = value; } fn writeFloat(self: *Writer, value: anytype) !void { _ = self; _ = value; } }; // syntax