33 lines
1.2 KiB
Zig
33 lines
1.2 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 freeQStringList = @import("../utils/free/freeQStringList.zig").freeQStringList;
|
|
|
|
pub fn readQStringList(reader: anytype, allocator: *std.mem.Allocator) ![][]const u8 {
|
|
var length = try readUInt(reader);
|
|
//std.debug.print("read: readQStringList length={d} \n", .{length});
|
|
|
|
var stringList = try allocator.alloc([]const u8, @intCast(usize, length));
|
|
|
|
var iter = range(u32, 0, length);
|
|
while (iter.next()) |i| {
|
|
stringList[i] = try readString(reader, allocator);
|
|
}
|
|
|
|
return stringList;
|
|
}
|
|
|
|
test "deserialize QStringList" {
|
|
var bytes = &[_]u8{ 0, 0, 0, 2, 0, 0, 0, 6, 0, 117, 0, 119, 0, 117, 0, 0, 0, 6, 0, 111, 0, 119, 0, 111 };
|
|
var fBS = std.io.fixedBufferStream(bytes);
|
|
|
|
var qstringlist = try readQStringList(fBS.reader(), std.testing.allocator);
|
|
defer freeQStringList(qstringlist, std.testing.allocator);
|
|
|
|
try std.testing.expect(qstringlist.len == 2);
|
|
try std.testing.expectEqualStrings(qstringlist[0], "uwu");
|
|
try std.testing.expectEqualStrings(qstringlist[1], "owo");
|
|
}
|