1
0
Fork 0
QuasselClient/src/qtshit/read/readQVariantMap.zig
2021-06-04 17:22:11 +01:00

35 lines
1.4 KiB
Zig

const std = @import("std");
const range = @import("../utils/RangeIter.zig").range;
const readUInt = @import("./readUInt.zig").readUInt;
const readString = @import("./readString.zig").readString;
const readQVariant = @import("./readQVariant.zig").readQVariant;
const freeQVariantMap = @import("../utils/free/freeQVariantMap.zig").freeQVariantMap;
const QVariant = @import("../types/QVariant.zig").QVariant;
pub fn readQVariantMap(reader: anytype, allocator: *std.mem.Allocator) !std.StringHashMap(QVariant) {
var map = std.StringHashMap(QVariant).init(allocator);
var numItems = try readUInt(reader);
//std.debug.print("read: readQVariantMap length={d} \n", .{numItems});
var iter = range(u32, 0, numItems);
while (iter.next()) |i| {
var key = try readString(reader, allocator);
var value = try readQVariant(reader, allocator);
try map.put(key, value);
}
return map;
}
test "deserialize QVariantMap" {
var bytes = &[_]u8{ 0, 0, 0, 2, 0, 0, 0, 8, 0, 65, 0, 67, 0, 65, 0, 66, 0, 0, 0, 3, 0, 0, 0, 5, 32, 0, 0, 0, 6, 0, 111, 0, 119, 0, 111, 0, 0, 0, 1, 0, 12 };
var fBS = std.io.fixedBufferStream(bytes);
var qvariantmap = try readQVariantMap(fBS.reader(), std.testing.allocator);
defer freeQVariantMap(qvariantmap, std.testing.allocator);
try std.testing.expect(qvariantmap.get("ACAB").?.UInt == 1312);
try std.testing.expect(qvariantmap.get("owo").?.Byte == 12);
}