diff --git a/src/qtshit/qvariant.zig b/src/qtshit/qvariant.zig index e69de29..852fea7 100644 --- a/src/qtshit/qvariant.zig +++ b/src/qtshit/qvariant.zig @@ -0,0 +1,9 @@ +const std = @import("std"); + +const QVariant = union { + int: u32, + short: u16, + byte: u8, + string: []u8 + stringlist: std.ArrayList([]const u8) +}; \ No newline at end of file diff --git a/src/qtshit/read.zig b/src/qtshit/read.zig index 29a06e7..70922f1 100644 --- a/src/qtshit/read.zig +++ b/src/qtshit/read.zig @@ -1,4 +1,5 @@ const std = @import("std"); +const QVariant = @import("./qvariant.zig").QVariant; pub fn get_int(reader: anytype) !u32 { return try reader.readIntBig(u32); @@ -32,3 +33,25 @@ pub fn get_stringlist(reader: anytype, allocator: *std.mem.Allocator) !std.Array } return strList; } + +pub fn get_qvariant(reader: anytype) !u32 { + var type_id = try get_int(reader); + // TODO: make nop variants work??? + _ = try get_byte(reader); + return type_id; +} + +pub fn get_variant_t(reader: anytype, type_id: u32) !QVariant { + switch (type_id) { + 1 => { + var byte = try get_byte(reader); + return QVariant{ .byte = byte }; + }, + else => {}, + } +} + +pub fn get_variant(reader: anytype) !QVariant { + var type_id = try get_qvariant(reader); + return try get_variant_t(reader, type_id); +} diff --git a/src/qtshit/test.zig b/src/qtshit/test.zig index 1f7aa50..86815fe 100644 --- a/src/qtshit/test.zig +++ b/src/qtshit/test.zig @@ -63,15 +63,13 @@ test "read/write stringlist" { try arr.append("Hewwo"); try arr.append("World"); - try write.add_stringlist(byteList.writer(), arr); var fBS = std.io.fixedBufferStream(byteList.items); var val = try read.get_stringlist(fBS.reader(), std.heap.page_allocator); - try expect(arr.items.len == val.items.len); for (arr.items) |str, index| { - try expect(std.mem.eql(u8, str, val.items[index])); + try std.testing.expectEqualStrings(str, val.items[index]); } -} \ No newline at end of file +}