using System.Linq; using SabreTools.Models.Internal; namespace SabreTools.Serialization { /// /// Serializer for EverdriveSMDB models to internal structure /// public partial class Internal { #region Serialize /// /// Convert from to /// public static MetadataFile ConvertToInternalModel(Models.EverdriveSMDB.MetadataFile item) { var metadataFile = new MetadataFile { [MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item), }; if (item?.Row != null && item.Row.Any()) metadataFile[MetadataFile.MachineKey] = item.Row.Select(ConvertMachineToInternalModel).ToArray(); return metadataFile; } /// /// Convert from to /// private static Header ConvertHeaderToInternalModel(Models.EverdriveSMDB.MetadataFile item) { var header = new Header { [Header.NameKey] = "Everdrive SMDB", }; return header; } /// /// Convert from to /// private static Machine ConvertMachineToInternalModel(Models.EverdriveSMDB.Row item) { var machine = new Machine { [Machine.RomKey] = ConvertToInternalModel(item), }; return machine; } /// /// Convert from to /// private static Rom ConvertToInternalModel(Models.EverdriveSMDB.Row item) { var rom = new Rom { [Rom.SHA256Key] = item.SHA256, [Rom.NameKey] = item.Name, [Rom.SHA1Key] = item.SHA1, [Rom.MD5Key] = item.MD5, [Rom.CRCKey] = item.CRC32, [Rom.SizeKey] = item.Size, }; return rom; } #endregion #region Deserialize /// /// Convert from to an array of /// public static Models.EverdriveSMDB.Row[]? ConvertMachineToEverdriveSMDB(Machine item) { if (item == null) return null; var roms = item.Read(Machine.RomKey); return roms?.Select(ConvertToEverdriveSMDB)?.ToArray(); } /// /// Convert from to /// private static Models.EverdriveSMDB.Row? ConvertToEverdriveSMDB(Rom? item) { if (item == null) return null; var row = new Models.EverdriveSMDB.Row { SHA256 = item.ReadString(Rom.SHA256Key), Name = item.ReadString(Rom.NameKey), SHA1 = item.ReadString(Rom.SHA1Key), MD5 = item.ReadString(Rom.MD5Key), CRC32 = item.ReadString(Rom.CRCKey), Size = item.ReadString(Rom.SizeKey), }; return row; } #endregion } }