1
0
Fork 0
QuasselClient/src/qtshit/read/readQVariantT.zig
2021-06-04 17:48:50 +01:00

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 };
}