// THIS FILE IS AUTOGENERATED DO NOT EDIT BY HAND using System; using System.Text.Json; using System.Text.Json.Serialization; using Microsoft.Extensions.DependencyInjection; using Wabbajack.DTOs; using Wabbajack.DTOs.BSA.ArchiveStates; using Wabbajack.DTOs.BSA.FileStates; using Wabbajack.DTOs.Directives; using Wabbajack.DTOs.DownloadStates; using Wabbajack.DTOs.Texture; using Wabbajack.Hashing.xxHash64; using Wabbajack.Paths; public class Wabbajack_DTOs_DownloadStates_IDownloadStateConverter : JsonConverter { public static void ConfigureServices(IServiceCollection services) { services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); } public override IDownloadState Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { var cReader = reader; if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); cReader.Read(); if (cReader.GetString() != "$type") throw new JsonException(); cReader.Read(); var type = cReader.GetString(); switch (type) { case "LoversLabDownloader, Wabbajack.Lib": return JsonSerializer.Deserialize(ref reader, options)!; case "GameFileSourceDownloader, Wabbajack.Lib": return JsonSerializer.Deserialize(ref reader, options)!; case "GameFileSource": return JsonSerializer.Deserialize(ref reader, options)!; case "GoogleDriveDownloader, Wabbajack.Lib": return JsonSerializer.Deserialize(ref reader, options)!; case "GoogleDrive": return JsonSerializer.Deserialize(ref reader, options)!; case "HttpDownloader, Wabbajack.Lib": return JsonSerializer.Deserialize(ref reader, options)!; case "Http": return JsonSerializer.Deserialize(ref reader, options)!; case "HttpDownloader": return JsonSerializer.Deserialize(ref reader, options)!; case "LoversLabOAuthDownloader, Wabbajack.Lib": return JsonSerializer.Deserialize(ref reader, options)!; case "LoversLab": return JsonSerializer.Deserialize(ref reader, options)!; case "Manual": return JsonSerializer.Deserialize(ref reader, options)!; case "ManualDownloader, Wabbajack.Lib": return JsonSerializer.Deserialize(ref reader, options)!; case "MediaFireDownloader+State, Wabbajack.Lib": return JsonSerializer.Deserialize(ref reader, options)!; case "MediaFire": return JsonSerializer.Deserialize(ref reader, options)!; case "MediaFireDownloader": return JsonSerializer.Deserialize(ref reader, options)!; case "MegaDownloader, Wabbajack.Lib": return JsonSerializer.Deserialize(ref reader, options)!; case "Mega": return JsonSerializer.Deserialize(ref reader, options)!; case "ModDBDownloader, Wabbajack.Lib": return JsonSerializer.Deserialize(ref reader, options)!; case "ModDB": return JsonSerializer.Deserialize(ref reader, options)!; case "ModDBDownloader": return JsonSerializer.Deserialize(ref reader, options)!; case "NexusDownloader, Wabbajack.Lib": return JsonSerializer.Deserialize(ref reader, options)!; case "Nexus": return JsonSerializer.Deserialize(ref reader, options)!; case "TESAllianceDownloader, Wabbajack.Lib": return JsonSerializer.Deserialize(ref reader, options)!; case "TESAlliance": return JsonSerializer.Deserialize(ref reader, options)!; case "VectorPlexusOAuthDownloader+State, Wabbajack.Lib": return JsonSerializer.Deserialize(ref reader, options)!; case "VectorPlexus": return JsonSerializer.Deserialize(ref reader, options)!; case "WabbajackCDNDownloader+State, Wabbajack.Lib": return JsonSerializer.Deserialize(ref reader, options)!; case "WabbajackCDN": return JsonSerializer.Deserialize(ref reader, options)!; default: throw new JsonException($"No Type dispatch for {type}"); } } public override void Write(Utf8JsonWriter writer, IDownloadState value, JsonSerializerOptions options) { switch (value) { case LoversLab v0: JsonSerializer.Serialize(writer, v0, options); return; case VectorPlexus v1: JsonSerializer.Serialize(writer, v1, options); return; case DeprecatedLoversLab v2: JsonSerializer.Serialize(writer, v2, options); return; case GameFileSource v3: JsonSerializer.Serialize(writer, v3, options); return; case GoogleDrive v4: JsonSerializer.Serialize(writer, v4, options); return; case Http v5: JsonSerializer.Serialize(writer, v5, options); return; case Manual v6: JsonSerializer.Serialize(writer, v6, options); return; case MediaFire v7: JsonSerializer.Serialize(writer, v7, options); return; case Mega v8: JsonSerializer.Serialize(writer, v8, options); return; case ModDB v9: JsonSerializer.Serialize(writer, v9, options); return; case Nexus v10: JsonSerializer.Serialize(writer, v10, options); return; case TESAlliance v11: JsonSerializer.Serialize(writer, v11, options); return; case WabbajackCDN v12: JsonSerializer.Serialize(writer, v12, options); return; } } } public class Wabbajack_DTOs_DownloadStates_DeprecatedLoversLabConverter : JsonConverter { public override DeprecatedLoversLab Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { default: reader.Skip(); break; } } return new DeprecatedLoversLab(); } public override void Write(Utf8JsonWriter writer, DeprecatedLoversLab value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "LoversLabDownloader, Wabbajack.Lib"); writer.WriteEndObject(); } } public class Wabbajack_DTOs_DownloadStates_GameFileSourceConverter : JsonConverter { public override GameFileSource Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); Game gameProp = default; RelativePath gamefileProp = default; string gameversionProp = default; Hash hashProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "Game": gameProp = JsonSerializer.Deserialize(ref reader, options); break; case "GameFile": gamefileProp = JsonSerializer.Deserialize(ref reader, options); break; case "GameVersion": gameversionProp = JsonSerializer.Deserialize(ref reader, options); break; case "Hash": hashProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new GameFileSource { Game = gameProp, GameFile = gamefileProp, GameVersion = gameversionProp, Hash = hashProp }; } public override void Write(Utf8JsonWriter writer, GameFileSource value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "GameFileSourceDownloader, Wabbajack.Lib"); writer.WritePropertyName("Game"); JsonSerializer.Serialize(writer, value.Game, options); writer.WritePropertyName("GameFile"); JsonSerializer.Serialize(writer, value.GameFile, options); writer.WritePropertyName("GameVersion"); JsonSerializer.Serialize(writer, value.GameVersion, options); writer.WritePropertyName("Hash"); JsonSerializer.Serialize(writer, value.Hash, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_DownloadStates_GoogleDriveConverter : JsonConverter { public override GoogleDrive Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); string idProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "Id": idProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new GoogleDrive { Id = idProp }; } public override void Write(Utf8JsonWriter writer, GoogleDrive value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "GoogleDriveDownloader, Wabbajack.Lib"); writer.WritePropertyName("Id"); JsonSerializer.Serialize(writer, value.Id, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_DownloadStates_HttpConverter : JsonConverter { public override Http Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); string[] headersProp = default; Uri urlProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "Headers": headersProp = JsonSerializer.Deserialize(ref reader, options); break; case "Url": urlProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new Http { Headers = headersProp, Url = urlProp }; } public override void Write(Utf8JsonWriter writer, Http value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "HttpDownloader, Wabbajack.Lib"); writer.WritePropertyName("Headers"); JsonSerializer.Serialize(writer, value.Headers, options); writer.WritePropertyName("Url"); JsonSerializer.Serialize(writer, value.Url, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_DownloadStates_LoversLabConverter : JsonConverter { public override LoversLab Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); string authorProp = default; string descriptionProp = default; Uri imageurlProp = default; string ips4fileProp = default; long ips4modProp = default; string ips4urlProp = default; bool isattachmentProp = default; bool isnsfwProp = default; string nameProp = default; string versionProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "Author": authorProp = JsonSerializer.Deserialize(ref reader, options); break; case "Description": descriptionProp = JsonSerializer.Deserialize(ref reader, options); break; case "ImageURL": imageurlProp = JsonSerializer.Deserialize(ref reader, options); break; case "IPS4File": ips4fileProp = JsonSerializer.Deserialize(ref reader, options); break; case "IPS4Mod": ips4modProp = JsonSerializer.Deserialize(ref reader, options); break; case "IPS4Url": ips4urlProp = JsonSerializer.Deserialize(ref reader, options); break; case "IsAttachment": isattachmentProp = JsonSerializer.Deserialize(ref reader, options); break; case "IsNSFW": isnsfwProp = JsonSerializer.Deserialize(ref reader, options); break; case "Name": nameProp = JsonSerializer.Deserialize(ref reader, options); break; case "Version": versionProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new LoversLab { Author = authorProp, Description = descriptionProp, ImageURL = imageurlProp, IPS4File = ips4fileProp, IPS4Mod = ips4modProp, IPS4Url = ips4urlProp, IsAttachment = isattachmentProp, IsNSFW = isnsfwProp, Name = nameProp, Version = versionProp }; } public override void Write(Utf8JsonWriter writer, LoversLab value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "LoversLabOAuthDownloader, Wabbajack.Lib"); writer.WritePropertyName("Author"); JsonSerializer.Serialize(writer, value.Author, options); writer.WritePropertyName("Description"); JsonSerializer.Serialize(writer, value.Description, options); writer.WritePropertyName("ImageURL"); JsonSerializer.Serialize(writer, value.ImageURL, options); writer.WritePropertyName("IPS4File"); JsonSerializer.Serialize(writer, value.IPS4File, options); writer.WritePropertyName("IPS4Mod"); JsonSerializer.Serialize(writer, value.IPS4Mod, options); writer.WritePropertyName("IPS4Url"); JsonSerializer.Serialize(writer, value.IPS4Url, options); writer.WritePropertyName("IsAttachment"); JsonSerializer.Serialize(writer, value.IsAttachment, options); writer.WritePropertyName("IsNSFW"); JsonSerializer.Serialize(writer, value.IsNSFW, options); writer.WritePropertyName("Name"); JsonSerializer.Serialize(writer, value.Name, options); writer.WritePropertyName("Version"); JsonSerializer.Serialize(writer, value.Version, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_DownloadStates_ManualConverter : JsonConverter { public override Manual Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); Uri urlProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "Url": urlProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new Manual { Url = urlProp }; } public override void Write(Utf8JsonWriter writer, Manual value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "Manual"); writer.WritePropertyName("Url"); JsonSerializer.Serialize(writer, value.Url, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_DownloadStates_MediaFireConverter : JsonConverter { public override MediaFire Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); Uri urlProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "Url": urlProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new MediaFire { Url = urlProp }; } public override void Write(Utf8JsonWriter writer, MediaFire value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "MediaFireDownloader+State, Wabbajack.Lib"); writer.WritePropertyName("Url"); JsonSerializer.Serialize(writer, value.Url, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_DownloadStates_MegaConverter : JsonConverter { public override Mega Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); Uri urlProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "Url": urlProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new Mega { Url = urlProp }; } public override void Write(Utf8JsonWriter writer, Mega value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "MegaDownloader, Wabbajack.Lib"); writer.WritePropertyName("Url"); JsonSerializer.Serialize(writer, value.Url, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_DownloadStates_ModDBConverter : JsonConverter { public override ModDB Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); Uri urlProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "Url": urlProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new ModDB { Url = urlProp }; } public override void Write(Utf8JsonWriter writer, ModDB value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "ModDBDownloader, Wabbajack.Lib"); writer.WritePropertyName("Url"); JsonSerializer.Serialize(writer, value.Url, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_DownloadStates_NexusConverter : JsonConverter { public override Nexus Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); string authorProp = default; string descriptionProp = default; long fileidProp = default; Game gamenameProp = default; Uri imageurlProp = default; bool isnsfwProp = default; long modidProp = default; string nameProp = default; string versionProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "Author": authorProp = JsonSerializer.Deserialize(ref reader, options); break; case "Description": descriptionProp = JsonSerializer.Deserialize(ref reader, options); break; case "FileID": fileidProp = JsonSerializer.Deserialize(ref reader, options); break; case "GameName": gamenameProp = JsonSerializer.Deserialize(ref reader, options); break; case "ImageURL": imageurlProp = JsonSerializer.Deserialize(ref reader, options); break; case "IsNSFW": isnsfwProp = JsonSerializer.Deserialize(ref reader, options); break; case "ModID": modidProp = JsonSerializer.Deserialize(ref reader, options); break; case "Name": nameProp = JsonSerializer.Deserialize(ref reader, options); break; case "Version": versionProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new Nexus { Author = authorProp, Description = descriptionProp, FileID = fileidProp, Game = gamenameProp, ImageURL = imageurlProp, IsNSFW = isnsfwProp, ModID = modidProp, Name = nameProp, Version = versionProp }; } public override void Write(Utf8JsonWriter writer, Nexus value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "NexusDownloader, Wabbajack.Lib"); writer.WritePropertyName("Author"); JsonSerializer.Serialize(writer, value.Author, options); writer.WritePropertyName("Description"); JsonSerializer.Serialize(writer, value.Description, options); writer.WritePropertyName("FileID"); JsonSerializer.Serialize(writer, value.FileID, options); writer.WritePropertyName("GameName"); JsonSerializer.Serialize(writer, value.Game, options); writer.WritePropertyName("ImageURL"); JsonSerializer.Serialize(writer, value.ImageURL, options); writer.WritePropertyName("IsNSFW"); JsonSerializer.Serialize(writer, value.IsNSFW, options); writer.WritePropertyName("ModID"); JsonSerializer.Serialize(writer, value.ModID, options); writer.WritePropertyName("Name"); JsonSerializer.Serialize(writer, value.Name, options); writer.WritePropertyName("Version"); JsonSerializer.Serialize(writer, value.Version, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_DownloadStates_TESAllianceConverter : JsonConverter { public override TESAlliance Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); string fileidProp = default; string filenameProp = default; Uri fullurlProp = default; bool isattachmentProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "FileID": fileidProp = JsonSerializer.Deserialize(ref reader, options); break; case "FileName": filenameProp = JsonSerializer.Deserialize(ref reader, options); break; case "FullURL": fullurlProp = JsonSerializer.Deserialize(ref reader, options); break; case "IsAttachment": isattachmentProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new TESAlliance { FileID = fileidProp, FileName = filenameProp, FullURL = fullurlProp, IsAttachment = isattachmentProp }; } public override void Write(Utf8JsonWriter writer, TESAlliance value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "TESAllianceDownloader, Wabbajack.Lib"); writer.WritePropertyName("FileID"); JsonSerializer.Serialize(writer, value.FileID, options); writer.WritePropertyName("FileName"); JsonSerializer.Serialize(writer, value.FileName, options); writer.WritePropertyName("FullURL"); JsonSerializer.Serialize(writer, value.FullURL, options); writer.WritePropertyName("IsAttachment"); JsonSerializer.Serialize(writer, value.IsAttachment, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_DownloadStates_VectorPlexusConverter : JsonConverter { public override VectorPlexus Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); string authorProp = default; string descriptionProp = default; Uri imageurlProp = default; string ips4fileProp = default; long ips4modProp = default; string ips4urlProp = default; bool isattachmentProp = default; bool isnsfwProp = default; string nameProp = default; string versionProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "Author": authorProp = JsonSerializer.Deserialize(ref reader, options); break; case "Description": descriptionProp = JsonSerializer.Deserialize(ref reader, options); break; case "ImageURL": imageurlProp = JsonSerializer.Deserialize(ref reader, options); break; case "IPS4File": ips4fileProp = JsonSerializer.Deserialize(ref reader, options); break; case "IPS4Mod": ips4modProp = JsonSerializer.Deserialize(ref reader, options); break; case "IPS4Url": ips4urlProp = JsonSerializer.Deserialize(ref reader, options); break; case "IsAttachment": isattachmentProp = JsonSerializer.Deserialize(ref reader, options); break; case "IsNSFW": isnsfwProp = JsonSerializer.Deserialize(ref reader, options); break; case "Name": nameProp = JsonSerializer.Deserialize(ref reader, options); break; case "Version": versionProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new VectorPlexus { Author = authorProp, Description = descriptionProp, ImageURL = imageurlProp, IPS4File = ips4fileProp, IPS4Mod = ips4modProp, IPS4Url = ips4urlProp, IsAttachment = isattachmentProp, IsNSFW = isnsfwProp, Name = nameProp, Version = versionProp }; } public override void Write(Utf8JsonWriter writer, VectorPlexus value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "VectorPlexusOAuthDownloader+State, Wabbajack.Lib"); writer.WritePropertyName("Author"); JsonSerializer.Serialize(writer, value.Author, options); writer.WritePropertyName("Description"); JsonSerializer.Serialize(writer, value.Description, options); writer.WritePropertyName("ImageURL"); JsonSerializer.Serialize(writer, value.ImageURL, options); writer.WritePropertyName("IPS4File"); JsonSerializer.Serialize(writer, value.IPS4File, options); writer.WritePropertyName("IPS4Mod"); JsonSerializer.Serialize(writer, value.IPS4Mod, options); writer.WritePropertyName("IPS4Url"); JsonSerializer.Serialize(writer, value.IPS4Url, options); writer.WritePropertyName("IsAttachment"); JsonSerializer.Serialize(writer, value.IsAttachment, options); writer.WritePropertyName("IsNSFW"); JsonSerializer.Serialize(writer, value.IsNSFW, options); writer.WritePropertyName("Name"); JsonSerializer.Serialize(writer, value.Name, options); writer.WritePropertyName("Version"); JsonSerializer.Serialize(writer, value.Version, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_DownloadStates_WabbajackCDNConverter : JsonConverter { public override WabbajackCDN Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); Uri urlProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "Url": urlProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new WabbajackCDN { Url = urlProp }; } public override void Write(Utf8JsonWriter writer, WabbajackCDN value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "WabbajackCDNDownloader+State, Wabbajack.Lib"); writer.WritePropertyName("Url"); JsonSerializer.Serialize(writer, value.Url, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_BSA_ArchiveStates_IArchiveConverter : JsonConverter { public static void ConfigureServices(IServiceCollection services) { services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); } public override IArchive Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { var cReader = reader; if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); cReader.Read(); if (cReader.GetString() != "$type") throw new JsonException(); cReader.Read(); var type = cReader.GetString(); switch (type) { case "BA2State, Compression.BSA": return JsonSerializer.Deserialize(ref reader, options)!; case "BA2State": return JsonSerializer.Deserialize(ref reader, options)!; case "BSAState, Compression.BSA": return JsonSerializer.Deserialize(ref reader, options)!; case "BSAState": return JsonSerializer.Deserialize(ref reader, options)!; case "TES3State": return JsonSerializer.Deserialize(ref reader, options)!; case "TES3State, Compression.BSA": return JsonSerializer.Deserialize(ref reader, options)!; default: throw new JsonException($"No Type dispatch for {type}"); } } public override void Write(Utf8JsonWriter writer, IArchive value, JsonSerializerOptions options) { switch (value) { case BA2State v0: JsonSerializer.Serialize(writer, v0, options); return; case BSAState v1: JsonSerializer.Serialize(writer, v1, options); return; case TES3State v2: JsonSerializer.Serialize(writer, v2, options); return; } } } public class Wabbajack_DTOs_BSA_ArchiveStates_BA2StateConverter : JsonConverter { public override BA2State Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); bool hasnametableProp = default; string headermagicProp = default; BA2EntryType typeProp = default; uint versionProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "HasNameTable": hasnametableProp = JsonSerializer.Deserialize(ref reader, options); break; case "HeaderMagic": headermagicProp = JsonSerializer.Deserialize(ref reader, options); break; case "Type": typeProp = JsonSerializer.Deserialize(ref reader, options); break; case "Version": versionProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new BA2State { HasNameTable = hasnametableProp, HeaderMagic = headermagicProp, Type = typeProp, Version = versionProp }; } public override void Write(Utf8JsonWriter writer, BA2State value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "BA2State, Compression.BSA"); writer.WritePropertyName("HasNameTable"); JsonSerializer.Serialize(writer, value.HasNameTable, options); writer.WritePropertyName("HeaderMagic"); JsonSerializer.Serialize(writer, value.HeaderMagic, options); writer.WritePropertyName("Type"); JsonSerializer.Serialize(writer, value.Type, options); writer.WritePropertyName("Version"); JsonSerializer.Serialize(writer, value.Version, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_BSA_ArchiveStates_BSAStateConverter : JsonConverter { public override BSAState Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); uint archiveflagsProp = default; uint fileflagsProp = default; string magicProp = default; uint versionProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "ArchiveFlags": archiveflagsProp = JsonSerializer.Deserialize(ref reader, options); break; case "FileFlags": fileflagsProp = JsonSerializer.Deserialize(ref reader, options); break; case "Magic": magicProp = JsonSerializer.Deserialize(ref reader, options); break; case "Version": versionProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new BSAState { ArchiveFlags = archiveflagsProp, FileFlags = fileflagsProp, Magic = magicProp, Version = versionProp }; } public override void Write(Utf8JsonWriter writer, BSAState value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "BSAState, Compression.BSA"); writer.WritePropertyName("ArchiveFlags"); JsonSerializer.Serialize(writer, value.ArchiveFlags, options); writer.WritePropertyName("FileFlags"); JsonSerializer.Serialize(writer, value.FileFlags, options); writer.WritePropertyName("Magic"); JsonSerializer.Serialize(writer, value.Magic, options); writer.WritePropertyName("Version"); JsonSerializer.Serialize(writer, value.Version, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_BSA_ArchiveStates_TES3StateConverter : JsonConverter { public override TES3State Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); long dataoffsetProp = default; uint filecountProp = default; uint hashoffsetProp = default; uint versionnumberProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "DataOffset": dataoffsetProp = JsonSerializer.Deserialize(ref reader, options); break; case "FileCount": filecountProp = JsonSerializer.Deserialize(ref reader, options); break; case "HashOffset": hashoffsetProp = JsonSerializer.Deserialize(ref reader, options); break; case "VersionNumber": versionnumberProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new TES3State { DataOffset = dataoffsetProp, FileCount = filecountProp, HashOffset = hashoffsetProp, VersionNumber = versionnumberProp }; } public override void Write(Utf8JsonWriter writer, TES3State value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "TES3State"); writer.WritePropertyName("DataOffset"); JsonSerializer.Serialize(writer, value.DataOffset, options); writer.WritePropertyName("FileCount"); JsonSerializer.Serialize(writer, value.FileCount, options); writer.WritePropertyName("HashOffset"); JsonSerializer.Serialize(writer, value.HashOffset, options); writer.WritePropertyName("VersionNumber"); JsonSerializer.Serialize(writer, value.VersionNumber, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_DirectiveConverter : JsonConverter { public static void ConfigureServices(IServiceCollection services) { services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); } public override Directive Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { var cReader = reader; if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); cReader.Read(); if (cReader.GetString() != "$type") throw new JsonException(); cReader.Read(); var type = cReader.GetString(); switch (type) { case "ArchiveMeta": return JsonSerializer.Deserialize(ref reader, options)!; case "ArchiveMeta, Wabbajack.Lib": return JsonSerializer.Deserialize(ref reader, options)!; case "CreateBSA": return JsonSerializer.Deserialize(ref reader, options)!; case "CreateBSA, Wabbajack.Lib": return JsonSerializer.Deserialize(ref reader, options)!; case "FromArchive": return JsonSerializer.Deserialize(ref reader, options)!; case "FromArchive, Wabbajack.Lib": return JsonSerializer.Deserialize(ref reader, options)!; case "IgnoredDirectly": return JsonSerializer.Deserialize(ref reader, options)!; case "InlineFile": return JsonSerializer.Deserialize(ref reader, options)!; case "InlineFile, Wabbajack.Lib": return JsonSerializer.Deserialize(ref reader, options)!; case "MergedPatch, Wabbajack.Lib": return JsonSerializer.Deserialize(ref reader, options)!; case "MergedPatch": return JsonSerializer.Deserialize(ref reader, options)!; case "NoMatch": return JsonSerializer.Deserialize(ref reader, options)!; case "PatchedFromArchive": return JsonSerializer.Deserialize(ref reader, options)!; case "PatchedFromArchive, Wabbajack.Lib": return JsonSerializer.Deserialize(ref reader, options)!; case "PropertyFile": return JsonSerializer.Deserialize(ref reader, options)!; case "PropertyFile, Wabbajack.Lib": return JsonSerializer.Deserialize(ref reader, options)!; case "RemappedInlineFile": return JsonSerializer.Deserialize(ref reader, options)!; case "RemappedInlineFile, Wabbajack.Lib": return JsonSerializer.Deserialize(ref reader, options)!; case "TransformedTexture": return JsonSerializer.Deserialize(ref reader, options)!; case "TransformedTexture, Wabbajack.Lib": return JsonSerializer.Deserialize(ref reader, options)!; default: throw new JsonException($"No Type dispatch for {type}"); } } public override void Write(Utf8JsonWriter writer, Directive value, JsonSerializerOptions options) { switch (value) { case NoMatch v0: JsonSerializer.Serialize(writer, v0, options); return; case PatchedFromArchive v1: JsonSerializer.Serialize(writer, v1, options); return; case PropertyFile v2: JsonSerializer.Serialize(writer, v2, options); return; case RemappedInlineFile v3: JsonSerializer.Serialize(writer, v3, options); return; case TransformedTexture v4: JsonSerializer.Serialize(writer, v4, options); return; case ArchiveMeta v5: JsonSerializer.Serialize(writer, v5, options); return; case CreateBSA v6: JsonSerializer.Serialize(writer, v6, options); return; case FromArchive v7: JsonSerializer.Serialize(writer, v7, options); return; case IgnoredDirectly v8: JsonSerializer.Serialize(writer, v8, options); return; case InlineFile v9: JsonSerializer.Serialize(writer, v9, options); return; case MergedPatch v10: JsonSerializer.Serialize(writer, v10, options); return; } } } public class Wabbajack_DTOs_Directives_ArchiveMetaConverter : JsonConverter { public override ArchiveMeta Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); Hash hashProp = default; long sizeProp = default; RelativePath sourcedataidProp = default; RelativePath toProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "Hash": hashProp = JsonSerializer.Deserialize(ref reader, options); break; case "Size": sizeProp = JsonSerializer.Deserialize(ref reader, options); break; case "SourceDataID": sourcedataidProp = JsonSerializer.Deserialize(ref reader, options); break; case "To": toProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new ArchiveMeta { Hash = hashProp, Size = sizeProp, SourceDataID = sourcedataidProp, To = toProp }; } public override void Write(Utf8JsonWriter writer, ArchiveMeta value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "ArchiveMeta"); writer.WritePropertyName("Hash"); JsonSerializer.Serialize(writer, value.Hash, options); writer.WritePropertyName("Size"); JsonSerializer.Serialize(writer, value.Size, options); writer.WritePropertyName("SourceDataID"); JsonSerializer.Serialize(writer, value.SourceDataID, options); writer.WritePropertyName("To"); JsonSerializer.Serialize(writer, value.To, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_Directives_CreateBSAConverter : JsonConverter { public override CreateBSA Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); AFile[] filestatesProp = default; Hash hashProp = default; long sizeProp = default; IArchive stateProp = default; RelativePath tempidProp = default; RelativePath toProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "FileStates": filestatesProp = JsonSerializer.Deserialize(ref reader, options); break; case "Hash": hashProp = JsonSerializer.Deserialize(ref reader, options); break; case "Size": sizeProp = JsonSerializer.Deserialize(ref reader, options); break; case "State": stateProp = JsonSerializer.Deserialize(ref reader, options); break; case "TempID": tempidProp = JsonSerializer.Deserialize(ref reader, options); break; case "To": toProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new CreateBSA { FileStates = filestatesProp, Hash = hashProp, Size = sizeProp, State = stateProp, TempID = tempidProp, To = toProp }; } public override void Write(Utf8JsonWriter writer, CreateBSA value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "CreateBSA"); writer.WritePropertyName("FileStates"); JsonSerializer.Serialize(writer, value.FileStates, options); writer.WritePropertyName("Hash"); JsonSerializer.Serialize(writer, value.Hash, options); writer.WritePropertyName("Size"); JsonSerializer.Serialize(writer, value.Size, options); writer.WritePropertyName("State"); JsonSerializer.Serialize(writer, value.State, options); writer.WritePropertyName("TempID"); JsonSerializer.Serialize(writer, value.TempID, options); writer.WritePropertyName("To"); JsonSerializer.Serialize(writer, value.To, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_Directives_FromArchiveConverter : JsonConverter { public override FromArchive Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); HashRelativePath archivehashpathProp = default; Hash hashProp = default; long sizeProp = default; RelativePath toProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "ArchiveHashPath": archivehashpathProp = JsonSerializer.Deserialize(ref reader, options); break; case "Hash": hashProp = JsonSerializer.Deserialize(ref reader, options); break; case "Size": sizeProp = JsonSerializer.Deserialize(ref reader, options); break; case "To": toProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new FromArchive { ArchiveHashPath = archivehashpathProp, Hash = hashProp, Size = sizeProp, To = toProp }; } public override void Write(Utf8JsonWriter writer, FromArchive value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "FromArchive"); writer.WritePropertyName("ArchiveHashPath"); JsonSerializer.Serialize(writer, value.ArchiveHashPath, options); writer.WritePropertyName("Hash"); JsonSerializer.Serialize(writer, value.Hash, options); writer.WritePropertyName("Size"); JsonSerializer.Serialize(writer, value.Size, options); writer.WritePropertyName("To"); JsonSerializer.Serialize(writer, value.To, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_Directives_IgnoredDirectlyConverter : JsonConverter { public override IgnoredDirectly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); Hash hashProp = default; long sizeProp = default; RelativePath toProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "Hash": hashProp = JsonSerializer.Deserialize(ref reader, options); break; case "Size": sizeProp = JsonSerializer.Deserialize(ref reader, options); break; case "To": toProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new IgnoredDirectly { Hash = hashProp, Size = sizeProp, To = toProp }; } public override void Write(Utf8JsonWriter writer, IgnoredDirectly value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "IgnoredDirectly"); writer.WritePropertyName("Hash"); JsonSerializer.Serialize(writer, value.Hash, options); writer.WritePropertyName("Size"); JsonSerializer.Serialize(writer, value.Size, options); writer.WritePropertyName("To"); JsonSerializer.Serialize(writer, value.To, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_Directives_InlineFileConverter : JsonConverter { public override InlineFile Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); Hash hashProp = default; long sizeProp = default; RelativePath sourcedataidProp = default; RelativePath toProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "Hash": hashProp = JsonSerializer.Deserialize(ref reader, options); break; case "Size": sizeProp = JsonSerializer.Deserialize(ref reader, options); break; case "SourceDataID": sourcedataidProp = JsonSerializer.Deserialize(ref reader, options); break; case "To": toProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new InlineFile { Hash = hashProp, Size = sizeProp, SourceDataID = sourcedataidProp, To = toProp }; } public override void Write(Utf8JsonWriter writer, InlineFile value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "InlineFile"); writer.WritePropertyName("Hash"); JsonSerializer.Serialize(writer, value.Hash, options); writer.WritePropertyName("Size"); JsonSerializer.Serialize(writer, value.Size, options); writer.WritePropertyName("SourceDataID"); JsonSerializer.Serialize(writer, value.SourceDataID, options); writer.WritePropertyName("To"); JsonSerializer.Serialize(writer, value.To, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_Directives_MergedPatchConverter : JsonConverter { public override MergedPatch Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); Hash hashProp = default; RelativePath patchidProp = default; long sizeProp = default; SourcePatch[] sourcesProp = default; RelativePath toProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "Hash": hashProp = JsonSerializer.Deserialize(ref reader, options); break; case "PatchID": patchidProp = JsonSerializer.Deserialize(ref reader, options); break; case "Size": sizeProp = JsonSerializer.Deserialize(ref reader, options); break; case "Sources": sourcesProp = JsonSerializer.Deserialize(ref reader, options); break; case "To": toProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new MergedPatch { Hash = hashProp, PatchID = patchidProp, Size = sizeProp, Sources = sourcesProp, To = toProp }; } public override void Write(Utf8JsonWriter writer, MergedPatch value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "MergedPatch, Wabbajack.Lib"); writer.WritePropertyName("Hash"); JsonSerializer.Serialize(writer, value.Hash, options); writer.WritePropertyName("PatchID"); JsonSerializer.Serialize(writer, value.PatchID, options); writer.WritePropertyName("Size"); JsonSerializer.Serialize(writer, value.Size, options); writer.WritePropertyName("Sources"); JsonSerializer.Serialize(writer, value.Sources, options); writer.WritePropertyName("To"); JsonSerializer.Serialize(writer, value.To, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_Directives_NoMatchConverter : JsonConverter { public override NoMatch Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); Hash hashProp = default; long sizeProp = default; RelativePath toProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "Hash": hashProp = JsonSerializer.Deserialize(ref reader, options); break; case "Size": sizeProp = JsonSerializer.Deserialize(ref reader, options); break; case "To": toProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new NoMatch { Hash = hashProp, Size = sizeProp, To = toProp }; } public override void Write(Utf8JsonWriter writer, NoMatch value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "NoMatch"); writer.WritePropertyName("Hash"); JsonSerializer.Serialize(writer, value.Hash, options); writer.WritePropertyName("Size"); JsonSerializer.Serialize(writer, value.Size, options); writer.WritePropertyName("To"); JsonSerializer.Serialize(writer, value.To, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_Directives_PatchedFromArchiveConverter : JsonConverter { public override PatchedFromArchive Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); HashRelativePath archivehashpathProp = default; Hash fromhashProp = default; Hash hashProp = default; RelativePath patchidProp = default; long sizeProp = default; RelativePath toProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "ArchiveHashPath": archivehashpathProp = JsonSerializer.Deserialize(ref reader, options); break; case "FromHash": fromhashProp = JsonSerializer.Deserialize(ref reader, options); break; case "Hash": hashProp = JsonSerializer.Deserialize(ref reader, options); break; case "PatchID": patchidProp = JsonSerializer.Deserialize(ref reader, options); break; case "Size": sizeProp = JsonSerializer.Deserialize(ref reader, options); break; case "To": toProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new PatchedFromArchive { ArchiveHashPath = archivehashpathProp, FromHash = fromhashProp, Hash = hashProp, PatchID = patchidProp, Size = sizeProp, To = toProp }; } public override void Write(Utf8JsonWriter writer, PatchedFromArchive value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "PatchedFromArchive"); writer.WritePropertyName("ArchiveHashPath"); JsonSerializer.Serialize(writer, value.ArchiveHashPath, options); writer.WritePropertyName("FromHash"); JsonSerializer.Serialize(writer, value.FromHash, options); writer.WritePropertyName("Hash"); JsonSerializer.Serialize(writer, value.Hash, options); writer.WritePropertyName("PatchID"); JsonSerializer.Serialize(writer, value.PatchID, options); writer.WritePropertyName("Size"); JsonSerializer.Serialize(writer, value.Size, options); writer.WritePropertyName("To"); JsonSerializer.Serialize(writer, value.To, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_Directives_PropertyFileConverter : JsonConverter { public override PropertyFile Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); Hash hashProp = default; long sizeProp = default; RelativePath sourcedataidProp = default; RelativePath toProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "Hash": hashProp = JsonSerializer.Deserialize(ref reader, options); break; case "Size": sizeProp = JsonSerializer.Deserialize(ref reader, options); break; case "SourceDataID": sourcedataidProp = JsonSerializer.Deserialize(ref reader, options); break; case "To": toProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new PropertyFile { Hash = hashProp, Size = sizeProp, SourceDataID = sourcedataidProp, To = toProp }; } public override void Write(Utf8JsonWriter writer, PropertyFile value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "PropertyFile"); writer.WritePropertyName("Hash"); JsonSerializer.Serialize(writer, value.Hash, options); writer.WritePropertyName("Size"); JsonSerializer.Serialize(writer, value.Size, options); writer.WritePropertyName("SourceDataID"); JsonSerializer.Serialize(writer, value.SourceDataID, options); writer.WritePropertyName("To"); JsonSerializer.Serialize(writer, value.To, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_Directives_RemappedInlineFileConverter : JsonConverter { public override RemappedInlineFile Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); Hash hashProp = default; long sizeProp = default; RelativePath sourcedataidProp = default; RelativePath toProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "Hash": hashProp = JsonSerializer.Deserialize(ref reader, options); break; case "Size": sizeProp = JsonSerializer.Deserialize(ref reader, options); break; case "SourceDataID": sourcedataidProp = JsonSerializer.Deserialize(ref reader, options); break; case "To": toProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new RemappedInlineFile { Hash = hashProp, Size = sizeProp, SourceDataID = sourcedataidProp, To = toProp }; } public override void Write(Utf8JsonWriter writer, RemappedInlineFile value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "RemappedInlineFile"); writer.WritePropertyName("Hash"); JsonSerializer.Serialize(writer, value.Hash, options); writer.WritePropertyName("Size"); JsonSerializer.Serialize(writer, value.Size, options); writer.WritePropertyName("SourceDataID"); JsonSerializer.Serialize(writer, value.SourceDataID, options); writer.WritePropertyName("To"); JsonSerializer.Serialize(writer, value.To, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_Directives_TransformedTextureConverter : JsonConverter { public override TransformedTexture Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); HashRelativePath archivehashpathProp = default; Hash hashProp = default; ImageState imagestateProp = default; long sizeProp = default; RelativePath toProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "ArchiveHashPath": archivehashpathProp = JsonSerializer.Deserialize(ref reader, options); break; case "Hash": hashProp = JsonSerializer.Deserialize(ref reader, options); break; case "ImageState": imagestateProp = JsonSerializer.Deserialize(ref reader, options); break; case "Size": sizeProp = JsonSerializer.Deserialize(ref reader, options); break; case "To": toProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new TransformedTexture { ArchiveHashPath = archivehashpathProp, Hash = hashProp, ImageState = imagestateProp, Size = sizeProp, To = toProp }; } public override void Write(Utf8JsonWriter writer, TransformedTexture value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "TransformedTexture"); writer.WritePropertyName("ArchiveHashPath"); JsonSerializer.Serialize(writer, value.ArchiveHashPath, options); writer.WritePropertyName("Hash"); JsonSerializer.Serialize(writer, value.Hash, options); writer.WritePropertyName("ImageState"); JsonSerializer.Serialize(writer, value.ImageState, options); writer.WritePropertyName("Size"); JsonSerializer.Serialize(writer, value.Size, options); writer.WritePropertyName("To"); JsonSerializer.Serialize(writer, value.To, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_BSA_FileStates_AFileConverter : JsonConverter { public static void ConfigureServices(IServiceCollection services) { services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); } public override AFile Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { var cReader = reader; if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); cReader.Read(); if (cReader.GetString() != "$type") throw new JsonException(); cReader.Read(); var type = cReader.GetString(); switch (type) { case "BA2DX10Entry": return JsonSerializer.Deserialize(ref reader, options)!; case "BA2DX10Entry, Compression.BSA": return JsonSerializer.Deserialize(ref reader, options)!; case "BA2File": return JsonSerializer.Deserialize(ref reader, options)!; case "BA2FileEntryState, Compression.BSA": return JsonSerializer.Deserialize(ref reader, options)!; case "BSAFileState, Compression.BSA": return JsonSerializer.Deserialize(ref reader, options)!; case "BSAFile": return JsonSerializer.Deserialize(ref reader, options)!; case "TES3File": return JsonSerializer.Deserialize(ref reader, options)!; default: throw new JsonException($"No Type dispatch for {type}"); } } public override void Write(Utf8JsonWriter writer, AFile value, JsonSerializerOptions options) { switch (value) { case BA2DX10File v0: JsonSerializer.Serialize(writer, v0, options); return; case BA2File v1: JsonSerializer.Serialize(writer, v1, options); return; case BSAFile v2: JsonSerializer.Serialize(writer, v2, options); return; case TES3File v3: JsonSerializer.Serialize(writer, v3, options); return; } } } public class Wabbajack_DTOs_BSA_FileStates_BA2DX10FileConverter : JsonConverter { public override BA2DX10File Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); ushort chunkhdrlenProp = default; BA2Chunk[] chunksProp = default; uint dirhashProp = default; string extensionProp = default; ushort heightProp = default; int indexProp = default; uint namehashProp = default; byte nummipsProp = default; RelativePath pathProp = default; byte pixelformatProp = default; ushort unk16Prop = default; byte unk8Prop = default; ushort widthProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "ChunkHdrLen": chunkhdrlenProp = JsonSerializer.Deserialize(ref reader, options); break; case "Chunks": chunksProp = JsonSerializer.Deserialize(ref reader, options); break; case "DirHash": dirhashProp = JsonSerializer.Deserialize(ref reader, options); break; case "Extension": extensionProp = JsonSerializer.Deserialize(ref reader, options); break; case "Height": heightProp = JsonSerializer.Deserialize(ref reader, options); break; case "Index": indexProp = JsonSerializer.Deserialize(ref reader, options); break; case "NameHash": namehashProp = JsonSerializer.Deserialize(ref reader, options); break; case "NumMips": nummipsProp = JsonSerializer.Deserialize(ref reader, options); break; case "Path": pathProp = JsonSerializer.Deserialize(ref reader, options); break; case "PixelFormat": pixelformatProp = JsonSerializer.Deserialize(ref reader, options); break; case "Unk16": unk16Prop = JsonSerializer.Deserialize(ref reader, options); break; case "Unk8": unk8Prop = JsonSerializer.Deserialize(ref reader, options); break; case "Width": widthProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new BA2DX10File { ChunkHdrLen = chunkhdrlenProp, Chunks = chunksProp, DirHash = dirhashProp, Extension = extensionProp, Height = heightProp, Index = indexProp, NameHash = namehashProp, NumMips = nummipsProp, Path = pathProp, PixelFormat = pixelformatProp, Unk16 = unk16Prop, Unk8 = unk8Prop, Width = widthProp }; } public override void Write(Utf8JsonWriter writer, BA2DX10File value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "BA2DX10Entry"); writer.WritePropertyName("ChunkHdrLen"); JsonSerializer.Serialize(writer, value.ChunkHdrLen, options); writer.WritePropertyName("Chunks"); JsonSerializer.Serialize(writer, value.Chunks, options); writer.WritePropertyName("DirHash"); JsonSerializer.Serialize(writer, value.DirHash, options); writer.WritePropertyName("Extension"); JsonSerializer.Serialize(writer, value.Extension, options); writer.WritePropertyName("Height"); JsonSerializer.Serialize(writer, value.Height, options); writer.WritePropertyName("Index"); JsonSerializer.Serialize(writer, value.Index, options); writer.WritePropertyName("NameHash"); JsonSerializer.Serialize(writer, value.NameHash, options); writer.WritePropertyName("NumMips"); JsonSerializer.Serialize(writer, value.NumMips, options); writer.WritePropertyName("Path"); JsonSerializer.Serialize(writer, value.Path, options); writer.WritePropertyName("PixelFormat"); JsonSerializer.Serialize(writer, value.PixelFormat, options); writer.WritePropertyName("Unk16"); JsonSerializer.Serialize(writer, value.Unk16, options); writer.WritePropertyName("Unk8"); JsonSerializer.Serialize(writer, value.Unk8, options); writer.WritePropertyName("Width"); JsonSerializer.Serialize(writer, value.Width, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_BSA_FileStates_BA2FileConverter : JsonConverter { public override BA2File Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); uint alignProp = default; bool compressedProp = default; uint dirhashProp = default; string extensionProp = default; uint flagsProp = default; int indexProp = default; uint namehashProp = default; RelativePath pathProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "Align": alignProp = JsonSerializer.Deserialize(ref reader, options); break; case "Compressed": compressedProp = JsonSerializer.Deserialize(ref reader, options); break; case "DirHash": dirhashProp = JsonSerializer.Deserialize(ref reader, options); break; case "Extension": extensionProp = JsonSerializer.Deserialize(ref reader, options); break; case "Flags": flagsProp = JsonSerializer.Deserialize(ref reader, options); break; case "Index": indexProp = JsonSerializer.Deserialize(ref reader, options); break; case "NameHash": namehashProp = JsonSerializer.Deserialize(ref reader, options); break; case "Path": pathProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new BA2File { Align = alignProp, Compressed = compressedProp, DirHash = dirhashProp, Extension = extensionProp, Flags = flagsProp, Index = indexProp, NameHash = namehashProp, Path = pathProp }; } public override void Write(Utf8JsonWriter writer, BA2File value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "BA2File"); writer.WritePropertyName("Align"); JsonSerializer.Serialize(writer, value.Align, options); writer.WritePropertyName("Compressed"); JsonSerializer.Serialize(writer, value.Compressed, options); writer.WritePropertyName("DirHash"); JsonSerializer.Serialize(writer, value.DirHash, options); writer.WritePropertyName("Extension"); JsonSerializer.Serialize(writer, value.Extension, options); writer.WritePropertyName("Flags"); JsonSerializer.Serialize(writer, value.Flags, options); writer.WritePropertyName("Index"); JsonSerializer.Serialize(writer, value.Index, options); writer.WritePropertyName("NameHash"); JsonSerializer.Serialize(writer, value.NameHash, options); writer.WritePropertyName("Path"); JsonSerializer.Serialize(writer, value.Path, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_BSA_FileStates_BSAFileConverter : JsonConverter { public override BSAFile Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); bool flipcompressionProp = default; int indexProp = default; RelativePath pathProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "FlipCompression": flipcompressionProp = JsonSerializer.Deserialize(ref reader, options); break; case "Index": indexProp = JsonSerializer.Deserialize(ref reader, options); break; case "Path": pathProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new BSAFile { FlipCompression = flipcompressionProp, Index = indexProp, Path = pathProp }; } public override void Write(Utf8JsonWriter writer, BSAFile value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "BSAFileState, Compression.BSA"); writer.WritePropertyName("FlipCompression"); JsonSerializer.Serialize(writer, value.FlipCompression, options); writer.WritePropertyName("Index"); JsonSerializer.Serialize(writer, value.Index, options); writer.WritePropertyName("Path"); JsonSerializer.Serialize(writer, value.Path, options); writer.WriteEndObject(); } } public class Wabbajack_DTOs_BSA_FileStates_TES3FileConverter : JsonConverter { public override TES3File Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) throw new JsonException(); uint hash1Prop = default; uint hash2Prop = default; int indexProp = default; uint nameoffsetProp = default; uint offsetProp = default; RelativePath pathProp = default; uint sizeProp = default; while (true) { reader.Read(); if (reader.TokenType == JsonTokenType.EndObject) { reader.Read(); break; } var prop = reader.GetString(); reader.Read(); switch (prop) { case "Hash1": hash1Prop = JsonSerializer.Deserialize(ref reader, options); break; case "Hash2": hash2Prop = JsonSerializer.Deserialize(ref reader, options); break; case "Index": indexProp = JsonSerializer.Deserialize(ref reader, options); break; case "NameOffset": nameoffsetProp = JsonSerializer.Deserialize(ref reader, options); break; case "Offset": offsetProp = JsonSerializer.Deserialize(ref reader, options); break; case "Path": pathProp = JsonSerializer.Deserialize(ref reader, options); break; case "Size": sizeProp = JsonSerializer.Deserialize(ref reader, options); break; default: reader.Skip(); break; } } return new TES3File { Hash1 = hash1Prop, Hash2 = hash2Prop, Index = indexProp, NameOffset = nameoffsetProp, Offset = offsetProp, Path = pathProp, Size = sizeProp }; } public override void Write(Utf8JsonWriter writer, TES3File value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("$type", "TES3File"); writer.WritePropertyName("Hash1"); JsonSerializer.Serialize(writer, value.Hash1, options); writer.WritePropertyName("Hash2"); JsonSerializer.Serialize(writer, value.Hash2, options); writer.WritePropertyName("Index"); JsonSerializer.Serialize(writer, value.Index, options); writer.WritePropertyName("NameOffset"); JsonSerializer.Serialize(writer, value.NameOffset, options); writer.WritePropertyName("Offset"); JsonSerializer.Serialize(writer, value.Offset, options); writer.WritePropertyName("Path"); JsonSerializer.Serialize(writer, value.Path, options); writer.WritePropertyName("Size"); JsonSerializer.Serialize(writer, value.Size, options); writer.WriteEndObject(); } }