Work on qvariant.
This commit is contained in:
parent
d57830079c
commit
7d84fda25d
|
@ -0,0 +1,9 @@
|
|||
const std = @import("std");
|
||||
|
||||
const QVariant = union {
|
||||
int: u32,
|
||||
short: u16,
|
||||
byte: u8,
|
||||
string: []u8
|
||||
stringlist: std.ArrayList([]const u8)
|
||||
};
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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]);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue