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.Header; var softwareDb = header is not null ? ConvertHeaderFromInternalModel(header) : new SoftwareDb(); var machines = obj.Machine; 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.Timestamp, }; return softwareDb; } /// /// Convert from to /// private static Software ConvertMachineFromInternalModel(Data.Models.Metadata.Machine item) { var game = new Software { Title = item.Name, GenMSXID = item.GenMSXID, System = item.System, Company = item.Company, Year = item.Year, Country = item.Country, }; var dumps = item.Dump; 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.Original; if (original is not null) dump.Original = ConvertFromInternalModel(original); var rom = item.Rom; if (rom is not null) dump.Rom = ConvertRomFromInternalModel(rom); var megaRom = item.MegaRom; if (megaRom is not null) dump.Rom = ConvertMegaRomFromInternalModel(megaRom); var sccPlusCart = item.SCCPlusCart; 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.Start, Type = item.OpenMSXType, Hash = item.SHA1, Remark = item.Remark, }; return megaRom; } /// /// Convert from to /// private static Original ConvertFromInternalModel(Data.Models.Metadata.Original item) { var original = new Original { Value = item.Value, Content = item.Content, }; return original; } /// /// Convert from to /// private static Rom ConvertRomFromInternalModel(Data.Models.Metadata.Rom item) { var rom = new Rom { Start = item.Start, Type = item.OpenMSXType, Hash = item.SHA1, Remark = item.Remark, }; return rom; } /// /// Convert from to /// private static SCCPlusCart ConvertSCCPlusCartFromInternalModel(Data.Models.Metadata.Rom item) { var sccPlusCart = new SCCPlusCart { Start = item.Start, Type = item.OpenMSXType, Hash = item.SHA1, Remark = item.Remark, }; return sccPlusCart; } } }