using System.Collections.Generic; using System.Linq; using SabreTools.Models.Internal; namespace SabreTools.Serialization { /// /// Serializer for DosCenter models to internal structure /// public partial class Internal { #region Serialize /// /// Convert from to /// public static MetadataFile ConvertToInternalModel(Models.DosCenter.MetadataFile item) { var metadataFile = new MetadataFile(); if (item?.DosCenter != null) metadataFile[MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item.DosCenter); if (item?.Game != null && item.Game.Any()) metadataFile[MetadataFile.MachineKey] = item.Game.Select(ConvertMachineToInternalModel).ToArray(); return metadataFile; } /// /// Convert from to /// private static Header ConvertHeaderToInternalModel(Models.DosCenter.DosCenter item) { var header = new Header { [Header.NameKey] = item.Name, [Header.DescriptionKey] = item.Description, [Header.VersionKey] = item.Version, [Header.DateKey] = item.Date, [Header.AuthorKey] = item.Author, [Header.HomepageKey] = item.Homepage, [Header.CommentKey] = item.Comment, }; return header; } /// /// Convert from to /// private static Machine ConvertMachineToInternalModel(Models.DosCenter.Game item) { var machine = new Machine { [Machine.NameKey] = item.Name, }; if (item.File != null && item.File.Any()) { var roms = new List(); foreach (var file in item.File) { roms.Add(ConvertToInternalModel(file)); } machine[Machine.RomKey] = roms.ToArray(); } return machine; } /// /// Convert from to /// private static Rom ConvertToInternalModel(Models.DosCenter.File item) { var rom = new Rom { [Rom.NameKey] = item.Name, [Rom.SizeKey] = item.Size, [Rom.CRCKey] = item.CRC, [Rom.DateKey] = item.Date, }; return rom; } #endregion #region Deserialize /// /// Convert from to /// public static Models.DosCenter.DosCenter? ConvertHeaderToDosCenter(Header? item) { if (item == null) return null; var dosCenter = new Models.DosCenter.DosCenter { Name = item.ReadString(Header.NameKey), Description = item.ReadString(Header.DescriptionKey), Version = item.ReadString(Header.VersionKey), Date = item.ReadString(Header.DateKey), Author = item.ReadString(Header.AuthorKey), Homepage = item.ReadString(Header.HomepageKey), Comment = item.ReadString(Header.CommentKey), }; return dosCenter; } /// /// Convert from to /// public static Models.DosCenter.Game? ConvertMachineToDosCenter(Machine? item) { if (item == null) return null; var game = new Models.DosCenter.Game { Name = item.ReadString(Machine.NameKey), }; var roms = item.Read(Machine.RomKey); game.File = roms?.Select(ConvertToDosCenter)?.ToArray(); return game; } /// /// Convert from to /// private static Models.DosCenter.File? ConvertToDosCenter(Rom? item) { if (item == null) return null; var file = new Models.DosCenter.File { Name = item.ReadString(Rom.NameKey), Size = item.ReadString(Rom.SizeKey), CRC = item.ReadString(Rom.CRCKey), Date = item.ReadString(Rom.DateKey), }; return file; } #endregion } }