using System; using SabreTools.Data.Models.OpenMSX; namespace SabreTools.Serialization.CrossModel { public partial class OpenMSX : BaseMetadataSerializer { /// public override SoftwareDb? Deserialize(Data.Models.Metadata.MetadataFile? obj) { if (obj is null) return null; var header = obj.Read(Data.Models.Metadata.MetadataFile.HeaderKey); var softwareDb = header is not null ? ConvertHeaderFromInternalModel(header) : new SoftwareDb(); var machines = obj.Read(Data.Models.Metadata.MetadataFile.MachineKey); if (machines is not null && machines.Length > 0) softwareDb.Software = Array.ConvertAll(machines, ConvertMachineFromInternalModel); return softwareDb; } /// /// Convert from to /// private static SoftwareDb ConvertHeaderFromInternalModel(Data.Models.Metadata.Header item) { var softwareDb = new SoftwareDb { Timestamp = item.ReadString(Data.Models.Metadata.Header.TimestampKey), }; return softwareDb; } /// /// Convert from to /// private static Software ConvertMachineFromInternalModel(Data.Models.Metadata.Machine item) { var game = new Software { Title = item.ReadString(Data.Models.Metadata.Machine.NameKey), GenMSXID = item.ReadString(Data.Models.Metadata.Machine.GenMSXIDKey), System = item.ReadString(Data.Models.Metadata.Machine.SystemKey), Company = item.ReadString(Data.Models.Metadata.Machine.CompanyKey), Year = item.ReadString(Data.Models.Metadata.Machine.YearKey), Country = item.ReadString(Data.Models.Metadata.Machine.CountryKey), }; var dumps = item.Read(Data.Models.Metadata.Machine.DumpKey); if (dumps is not null && dumps.Length > 0) game.Dump = Array.ConvertAll(dumps, ConvertFromInternalModel); return game; } /// /// Convert from to /// private static Dump ConvertFromInternalModel(Data.Models.Metadata.Dump item) { var dump = new Dump(); var original = item.Read(Data.Models.Metadata.Dump.OriginalKey); if (original is not null) dump.Original = ConvertFromInternalModel(original); var rom = item.Read(Data.Models.Metadata.Dump.RomKey); if (rom is not null) dump.Rom = ConvertRomFromInternalModel(rom); var megaRom = item.Read(Data.Models.Metadata.Dump.MegaRomKey); if (megaRom is not null) dump.Rom = ConvertMegaRomFromInternalModel(megaRom); var sccPlusCart = item.Read(Data.Models.Metadata.Dump.SCCPlusCartKey); if (sccPlusCart is not null) dump.Rom = ConvertSCCPlusCartFromInternalModel(sccPlusCart); return dump; } /// /// Convert from to /// private static MegaRom ConvertMegaRomFromInternalModel(Data.Models.Metadata.Rom item) { var megaRom = new MegaRom { Start = item.ReadString(Data.Models.Metadata.Rom.StartKey), Type = item.ReadString(Data.Models.Metadata.Rom.OpenMSXType), Hash = item.ReadString(Data.Models.Metadata.Rom.SHA1Key), Remark = item.ReadString(Data.Models.Metadata.Rom.RemarkKey), }; return megaRom; } /// /// Convert from to /// private static Original ConvertFromInternalModel(Data.Models.Metadata.Original item) { var original = new Original { Value = item.ReadString(Data.Models.Metadata.Original.ValueKey), Content = item.ReadString(Data.Models.Metadata.Original.ContentKey), }; return original; } /// /// Convert from to /// private static Rom ConvertRomFromInternalModel(Data.Models.Metadata.Rom item) { var rom = new Rom { Start = item.ReadString(Data.Models.Metadata.Rom.StartKey), Type = item.ReadString(Data.Models.Metadata.Rom.OpenMSXType), Hash = item.ReadString(Data.Models.Metadata.Rom.SHA1Key), Remark = item.ReadString(Data.Models.Metadata.Rom.RemarkKey), }; return rom; } /// /// Convert from to /// private static SCCPlusCart ConvertSCCPlusCartFromInternalModel(Data.Models.Metadata.Rom item) { var sccPlusCart = new SCCPlusCart { Start = item.ReadString(Data.Models.Metadata.Rom.StartKey), Type = item.ReadString(Data.Models.Metadata.Rom.OpenMSXType), Hash = item.ReadString(Data.Models.Metadata.Rom.SHA1Key), Remark = item.ReadString(Data.Models.Metadata.Rom.RemarkKey), }; return sccPlusCart; } } }