74 lines
3.2 KiB
Zig
74 lines
3.2 KiB
Zig
const std = @import("std");
|
|
|
|
const readInt = @import("./readInt.zig").readInt;
|
|
const readUInt = @import("./readUInt.zig").readUInt;
|
|
const readShort = @import("./readShort.zig").readShort;
|
|
const readByte = @import("./readByte.zig").readByte;
|
|
const readSignedByte = @import("./readSignedByte.zig").readSignedByte;
|
|
const readQByteArray = @import("./readQByteArray.zig").readQByteArray;
|
|
const ReadStringErrors = @import("./readString.zig").ReadStringErrors;
|
|
const readString = @import("./readString.zig").readString;
|
|
const readQVariantList = @import("./readQVariantList.zig").readQVariantList;
|
|
const readQVariant = @import("./readQVariant.zig").readQVariant;
|
|
const readQVariantMap = @import("./readQVariantMap.zig").readQVariantMap;
|
|
const readQStringList = @import("./readQStringList.zig").readQStringList;
|
|
const readQDateTime = @import("./readQDateTime.zig").readQDateTime;
|
|
const readUserType = @import("./usertypes/readUserType.zig").readUserType;
|
|
|
|
const QVariant = @import("../types/QVariant.zig").QVariant;
|
|
const QVariantTypes = @import("../types/QVariantTypes.zig").QVariantTypes;
|
|
|
|
pub fn readQVariantT(reader: anytype, type_id: u32, allocator: *std.mem.Allocator) (@TypeOf(reader).Error || error{EndOfStream} || error{OutOfMemory} || error{DecodeError} || ReadStringErrors)!QVariant {
|
|
switch (type_id) {
|
|
@enumToInt(QVariantTypes.Byte) => {
|
|
var byte = try readByte(reader);
|
|
return QVariant{ .Byte = byte };
|
|
},
|
|
@enumToInt(QVariantTypes.Int) => {
|
|
var int = try readInt(reader);
|
|
return QVariant{ .Int = int };
|
|
},
|
|
@enumToInt(QVariantTypes.UInt) => {
|
|
var uint = try readUInt(reader);
|
|
return QVariant{ .UInt = uint };
|
|
},
|
|
@enumToInt(QVariantTypes.QVariantMap) => {
|
|
var map = try readQVariantMap(reader, allocator);
|
|
return QVariant{ .QVariantMap = map };
|
|
},
|
|
@enumToInt(QVariantTypes.QVariantList) => {
|
|
var list = try readQVariantList(reader, allocator);
|
|
return QVariant{ .QVariantList = list };
|
|
},
|
|
@enumToInt(QVariantTypes.String) => {
|
|
var str = try readString(reader, allocator);
|
|
return QVariant{ .String = str };
|
|
},
|
|
@enumToInt(QVariantTypes.QStringList) => {
|
|
var strlist = try readQStringList(reader, allocator);
|
|
return QVariant{ .QStringList = strlist };
|
|
},
|
|
@enumToInt(QVariantTypes.QByteArray) => {
|
|
var bArray = try readQByteArray(reader, allocator);
|
|
return QVariant{ .QByteArray = bArray };
|
|
},
|
|
@enumToInt(QVariantTypes.Short) => {
|
|
var short = try readShort(reader);
|
|
return QVariant{ .Short = short };
|
|
},
|
|
@enumToInt(QVariantTypes.QDateTime) => {
|
|
var datetime = try readQDateTime(reader);
|
|
return QVariant{ .QDateTime = datetime };
|
|
},
|
|
@enumToInt(QVariantTypes.UserType) => {
|
|
var usertype = try readUserType(reader, allocator);
|
|
return QVariant{ .UserType = usertype };
|
|
},
|
|
else => {
|
|
std.debug.print("Unknown Type ID: {d}\n", .{type_id});
|
|
return error.DecodeError;
|
|
},
|
|
}
|
|
return QVariant{ .empty = true };
|
|
}
|