using System.Collections.Generic; using System.Linq; namespace SabreTools.Serialization { /// /// Serializer for SoftwareList models to internal structure /// public partial class Internal { #region Serialize /// /// Convert from to /// public static Models.Internal.Header ConvertHeaderFromSoftwareList(Models.SoftwareList.SoftwareList item) { var header = new Models.Internal.Header { [Models.Internal.Header.NameKey] = item.Name, [Models.Internal.Header.DescriptionKey] = item.Description, [Models.Internal.Header.NotesKey] = item.Notes, }; return header; } /// /// Convert from to /// public static Models.Internal.Machine ConvertMachineFromSoftwareList(Models.SoftwareList.Software item) { var machine = new Models.Internal.Machine { [Models.Internal.Machine.NameKey] = item.Name, [Models.Internal.Machine.CloneOfKey] = item.CloneOf, [Models.Internal.Machine.SupportedKey] = item.Supported, [Models.Internal.Machine.DescriptionKey] = item.Description, [Models.Internal.Machine.YearKey] = item.Year, [Models.Internal.Machine.PublisherKey] = item.Publisher, [Models.Internal.Machine.NotesKey] = item.Notes, }; if (item.Info != null && item.Info.Any()) { var infos = new List(); foreach (var info in item.Info) { infos.Add(ConvertFromSoftwareList(info)); } machine[Models.Internal.Machine.InfoKey] = infos.ToArray(); } if (item.SharedFeat != null && item.SharedFeat.Any()) { var sharedFeats = new List(); foreach (var sharedFeat in item.SharedFeat) { sharedFeats.Add(ConvertFromSoftwareList(sharedFeat)); } machine[Models.Internal.Machine.SharedFeatKey] = sharedFeats.ToArray(); } if (item.Part != null && item.Part.Any()) { var parts = new List(); foreach (var part in item.Part) { parts.Add(ConvertFromSoftwareList(part)); } machine[Models.Internal.Machine.PartKey] = parts.ToArray(); } return machine; } /// /// Convert from to /// public static Models.Internal.DataArea ConvertFromSoftwareList(Models.SoftwareList.DataArea item) { var dataArea = new Models.Internal.DataArea { [Models.Internal.DataArea.NameKey] = item.Name, [Models.Internal.DataArea.SizeKey] = item.Size, [Models.Internal.DataArea.WidthKey] = item.Width, [Models.Internal.DataArea.EndiannessKey] = item.Endianness, }; if (item.Rom != null && item.Rom.Any()) { var roms = new List(); foreach (var rom in item.Rom) { roms.Add(ConvertFromSoftwareList(rom)); } dataArea[Models.Internal.DataArea.RomKey] = roms.ToArray(); } return dataArea; } /// /// Convert from to /// public static Models.Internal.DipSwitch ConvertFromSoftwareList(Models.SoftwareList.DipSwitch item) { var dipSwitch = new Models.Internal.DipSwitch { [Models.Internal.DipSwitch.NameKey] = item.Name, [Models.Internal.DipSwitch.TagKey] = item.Tag, [Models.Internal.DipSwitch.MaskKey] = item.Mask, }; if (item.DipValue != null && item.DipValue.Any()) { var dipValues = new List(); foreach (var dipValue in item.DipValue) { dipValues.Add(ConvertFromSoftwareList(dipValue)); } dipSwitch[Models.Internal.DipSwitch.DipValueKey] = dipValues.ToArray(); } return dipSwitch; } /// /// Convert from to /// public static Models.Internal.DipValue ConvertFromSoftwareList(Models.SoftwareList.DipValue item) { var dipValue = new Models.Internal.DipValue { [Models.Internal.DipValue.NameKey] = item.Name, [Models.Internal.DipValue.ValueKey] = item.Value, [Models.Internal.DipValue.DefaultKey] = item.Default, }; return dipValue; } /// /// Convert from to /// public static Models.Internal.Disk ConvertFromSoftwareList(Models.SoftwareList.Disk item) { var disk = new Models.Internal.Disk { [Models.Internal.Disk.NameKey] = item.Name, [Models.Internal.Disk.MD5Key] = item.MD5, [Models.Internal.Disk.SHA1Key] = item.SHA1, [Models.Internal.Disk.StatusKey] = item.Status, [Models.Internal.Disk.WritableKey] = item.Writeable, }; return disk; } /// /// Convert from to /// public static Models.Internal.DiskArea ConvertFromSoftwareList(Models.SoftwareList.DiskArea item) { var diskArea = new Models.Internal.DiskArea { [Models.Internal.DiskArea.NameKey] = item.Name, }; if (item.Disk != null && item.Disk.Any()) { var roms = new List(); foreach (var disk in item.Disk) { roms.Add(ConvertFromSoftwareList(disk)); } diskArea[Models.Internal.DiskArea.DiskKey] = roms.ToArray(); } return diskArea; } /// /// Convert from to /// public static Models.Internal.Feature ConvertFromSoftwareList(Models.SoftwareList.Feature item) { var feature = new Models.Internal.Feature { [Models.Internal.Feature.NameKey] = item.Name, [Models.Internal.Feature.ValueKey] = item.Value, }; return feature; } /// /// Convert from to /// public static Models.Internal.Info ConvertFromSoftwareList(Models.SoftwareList.Info item) { var info = new Models.Internal.Info { [Models.Internal.Info.NameKey] = item.Name, [Models.Internal.Info.ValueKey] = item.Value, }; return info; } /// /// Convert from to /// public static Models.Internal.Part ConvertFromSoftwareList(Models.SoftwareList.Part item) { var part = new Models.Internal.Part { [Models.Internal.Part.NameKey] = item.Name, [Models.Internal.Part.InterfaceKey] = item.Interface, }; if (item.Feature != null && item.Feature.Any()) { var features = new List(); foreach (var feature in item.Feature) { features.Add(ConvertFromSoftwareList(feature)); } part[Models.Internal.Part.FeatureKey] = features.ToArray(); } if (item.DataArea != null && item.DataArea.Any()) { var dataAreas = new List(); foreach (var dataArea in item.DataArea) { dataAreas.Add(ConvertFromSoftwareList(dataArea)); } part[Models.Internal.Part.DataAreaKey] = dataAreas.ToArray(); } if (item.DiskArea != null && item.DiskArea.Any()) { var diskAreas = new List(); foreach (var diskArea in item.DiskArea) { diskAreas.Add(ConvertFromSoftwareList(diskArea)); } part[Models.Internal.Part.DiskAreaKey] = diskAreas.ToArray(); } if (item.DipSwitch != null && item.DipSwitch.Any()) { var dipSwitches = new List(); foreach (var rom in item.DipSwitch) { dipSwitches.Add(ConvertFromSoftwareList(rom)); } part[Models.Internal.Part.DipSwitchKey] = dipSwitches.ToArray(); } return part; } /// /// Convert from to /// public static Models.Internal.Rom ConvertFromSoftwareList(Models.SoftwareList.Rom item) { var rom = new Models.Internal.Rom { [Models.Internal.Rom.NameKey] = item.Name, [Models.Internal.Rom.SizeKey] = item.Size, [Models.Internal.Rom.LengthKey] = item.Length, [Models.Internal.Rom.CRCKey] = item.CRC, [Models.Internal.Rom.SHA1Key] = item.SHA1, [Models.Internal.Rom.OffsetKey] = item.Offset, [Models.Internal.Rom.ValueKey] = item.Value, [Models.Internal.Rom.StatusKey] = item.Status, [Models.Internal.Rom.LoadFlagKey] = item.LoadFlag, }; return rom; } /// /// Convert from to /// public static Models.Internal.SharedFeat ConvertFromSoftwareList(Models.SoftwareList.SharedFeat item) { var sharedFeat = new Models.Internal.SharedFeat { [Models.Internal.SharedFeat.NameKey] = item.Name, [Models.Internal.SharedFeat.ValueKey] = item.Value, }; return sharedFeat; } #endregion #region Deserialize /// /// Convert from to /// public static Models.SoftwareList.SoftwareList? ConvertHeaderToSoftwareList(Models.Internal.Header? item) { if (item == null) return null; var softwareList = new Models.SoftwareList.SoftwareList { Name = item.ReadString(Models.Internal.Header.NameKey), Description = item.ReadString(Models.Internal.Header.DescriptionKey), Notes = item.ReadString(Models.Internal.Header.NotesKey), }; return softwareList; } /// /// Convert from to /// public static Models.SoftwareList.Software? ConvertMachineToSoftwareList(Models.Internal.Machine? item) { if (item == null) return null; var software = new Models.SoftwareList.Software { Name = item.ReadString(Models.Internal.Machine.NameKey), CloneOf = item.ReadString(Models.Internal.Machine.CloneOfKey), Supported = item.ReadString(Models.Internal.Machine.SupportedKey), Description = item.ReadString(Models.Internal.Machine.DescriptionKey), Year = item.ReadString(Models.Internal.Machine.YearKey), Publisher = item.ReadString(Models.Internal.Machine.PublisherKey), Notes = item.ReadString(Models.Internal.Machine.NotesKey), }; var infos = item.Read(Models.Internal.Machine.InfoKey); software.Info = infos?.Select(ConvertToSoftwareList)?.ToArray(); var sharedFeats = item.Read(Models.Internal.Machine.SharedFeatKey); software.SharedFeat = sharedFeats?.Select(ConvertToSoftwareList)?.ToArray(); var parts = item.Read(Models.Internal.Machine.PartKey); software.Part = parts?.Select(ConvertToSoftwareList)?.ToArray(); return software; } /// /// Convert from to /// private static Models.SoftwareList.DataArea? ConvertToSoftwareList(Models.Internal.DataArea? item) { if (item == null) return null; var dataArea = new Models.SoftwareList.DataArea { Name = item.ReadString(Models.Internal.DataArea.NameKey), Size = item.ReadString(Models.Internal.DataArea.SizeKey), Width = item.ReadString(Models.Internal.DataArea.WidthKey), Endianness = item.ReadString(Models.Internal.DataArea.EndiannessKey), }; var roms = item.Read(Models.Internal.DataArea.RomKey); dataArea.Rom = roms?.Select(ConvertToSoftwareList)?.ToArray(); return dataArea; } /// /// Convert from to /// private static Models.SoftwareList.DipSwitch? ConvertToSoftwareList(Models.Internal.DipSwitch? item) { if (item == null) return null; var dipSwitch = new Models.SoftwareList.DipSwitch { Name = item.ReadString(Models.Internal.DipSwitch.NameKey), Tag = item.ReadString(Models.Internal.DipSwitch.TagKey), Mask = item.ReadString(Models.Internal.DipSwitch.MaskKey), }; var dipValues = item.Read(Models.Internal.DipSwitch.DipValueKey); dipSwitch.DipValue = dipValues?.Select(ConvertToSoftwareList)?.ToArray(); return dipSwitch; } /// /// Convert from to /// private static Models.SoftwareList.DipValue? ConvertToSoftwareList(Models.Internal.DipValue? item) { if (item == null) return null; var dipValue = new Models.SoftwareList.DipValue { Name = item.ReadString(Models.Internal.DipValue.NameKey), Value = item.ReadString(Models.Internal.DipValue.ValueKey), Default = item.ReadString(Models.Internal.DipValue.DefaultKey), }; return dipValue; } /// /// Convert from to /// private static Models.SoftwareList.Disk? ConvertToSoftwareList(Models.Internal.Disk? item) { if (item == null) return null; var disk = new Models.SoftwareList.Disk { Name = item.ReadString(Models.Internal.Disk.NameKey), MD5 = item.ReadString(Models.Internal.Disk.MD5Key), SHA1 = item.ReadString(Models.Internal.Disk.SHA1Key), Status = item.ReadString(Models.Internal.Disk.StatusKey), Writeable = item.ReadString(Models.Internal.Disk.WritableKey), }; return disk; } /// /// Convert from to /// private static Models.SoftwareList.DiskArea? ConvertToSoftwareList(Models.Internal.DiskArea? item) { if (item == null) return null; var diskArea = new Models.SoftwareList.DiskArea { Name = item.ReadString(Models.Internal.DiskArea.NameKey), }; var disks = item.Read(Models.Internal.DiskArea.DiskKey); diskArea.Disk = disks?.Select(ConvertToSoftwareList)?.ToArray(); return diskArea; } /// /// Convert from to /// private static Models.SoftwareList.Feature? ConvertToSoftwareList(Models.Internal.Feature? item) { if (item == null) return null; var feature = new Models.SoftwareList.Feature { Name = item.ReadString(Models.Internal.Feature.NameKey), Value = item.ReadString(Models.Internal.Feature.ValueKey), }; return feature; } /// /// Convert from to /// private static Models.SoftwareList.Info? ConvertToSoftwareList(Models.Internal.Info? item) { if (item == null) return null; var info = new Models.SoftwareList.Info { Name = item.ReadString(Models.Internal.Info.NameKey), Value = item.ReadString(Models.Internal.Info.ValueKey), }; return info; } /// /// Convert from to /// private static Models.SoftwareList.Part? ConvertToSoftwareList(Models.Internal.Part? item) { if (item == null) return null; var part = new Models.SoftwareList.Part { Name = item.ReadString(Models.Internal.Part.NameKey), Interface = item.ReadString(Models.Internal.Part.InterfaceKey), }; var features = item.Read(Models.Internal.Part.FeatureKey); part.Feature = features?.Select(ConvertToSoftwareList)?.ToArray(); var dataAreas = item.Read(Models.Internal.Part.DataAreaKey); part.DataArea = dataAreas?.Select(ConvertToSoftwareList)?.ToArray(); var diskAreas = item.Read(Models.Internal.Part.DiskAreaKey); part.DiskArea = diskAreas?.Select(ConvertToSoftwareList)?.ToArray(); var dipSwitches = item.Read(Models.Internal.Part.DipSwitchKey); part.DipSwitch = dipSwitches?.Select(ConvertToSoftwareList)?.ToArray(); return part; } /// /// Convert from to /// private static Models.SoftwareList.Rom? ConvertToSoftwareList(Models.Internal.Rom? item) { if (item == null) return null; var rom = new Models.SoftwareList.Rom { Name = item.ReadString(Models.Internal.Rom.NameKey), Size = item.ReadString(Models.Internal.Rom.SizeKey), Length = item.ReadString(Models.Internal.Rom.LengthKey), CRC = item.ReadString(Models.Internal.Rom.CRCKey), SHA1 = item.ReadString(Models.Internal.Rom.SHA1Key), Offset = item.ReadString(Models.Internal.Rom.OffsetKey), Value = item.ReadString(Models.Internal.Rom.ValueKey), Status = item.ReadString(Models.Internal.Rom.StatusKey), LoadFlag = item.ReadString(Models.Internal.Rom.LoadFlagKey), }; return rom; } /// /// Convert from to /// private static Models.SoftwareList.SharedFeat? ConvertToSoftwareList(Models.Internal.SharedFeat? item) { if (item == null) return null; var sharedFeat = new Models.SoftwareList.SharedFeat { Name = item.ReadString(Models.Internal.SharedFeat.NameKey), Value = item.ReadString(Models.Internal.SharedFeat.ValueKey), }; return sharedFeat; } #endregion } }