From f74d40048465965fe044b4e2e3c26b939256fadf Mon Sep 17 00:00:00 2001 From: Vincent Rischmann Date: Fri, 1 Jan 2021 18:46:57 +0100 Subject: add readField --- sqlite.zig | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) (limited to 'sqlite.zig') diff --git a/sqlite.zig b/sqlite.zig index 29f40bf..125c489 100644 --- a/sqlite.zig +++ b/sqlite.zig @@ -569,27 +569,32 @@ pub fn Iterator(comptime Type: type) type { inline for (@typeInfo(Type).Struct.fields) |field, _i| { const i = @as(usize, _i); - const field_type_info = @typeInfo(field.field_type); - - const ret = switch (field.field_type) { - Blob => try self.readBytes(Blob, options.allocator, i, .Blob), - Text => try self.readBytes(Text, options.allocator, i, .Text), - else => switch (field_type_info) { - .Int => try self.readInt(field.field_type, i), - .Float => try self.readFloat(field.field_type, i), - .Bool => try self.readBool(i), - .Void => {}, - .Array => try self.readArray(field.field_type, i), - .Pointer => try self.readPointer(field.field_type, options.allocator, i), - else => @compileError("cannot populate field " ++ field.name ++ " of type " ++ @typeName(field.field_type)), - }, - }; + + const ret = try self.readField(field.field_type, i, options); @field(value, field.name) = ret; } return value; } + + fn readField(self: *Self, comptime FieldType: type, i: usize, options: anytype) !FieldType { + const field_type_info = @typeInfo(FieldType); + + return switch (FieldType) { + Blob => try self.readBytes(Blob, options.allocator, i, .Blob), + Text => try self.readBytes(Text, options.allocator, i, .Text), + else => switch (field_type_info) { + .Int => try self.readInt(FieldType, i), + .Float => try self.readFloat(FieldType, i), + .Bool => try self.readBool(i), + .Void => {}, + .Array => try self.readArray(FieldType, i), + .Pointer => try self.readPointer(FieldType, options.allocator, i), + else => @compileError("cannot populate field " ++ field.name ++ " of type " ++ @typeName(FieldType)), + }, + }; + } }; } -- cgit v1.2.3