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.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.Software ConvertMachineToSoftwareList(Models.Internal.Machine item) { 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), }; if (item.ContainsKey(Models.Internal.Machine.InfoKey) && item[Models.Internal.Machine.InfoKey] is Models.Internal.Info[] infos) { var infoItems = new List(); foreach (var info in infos) { infoItems.Add(ConvertToSoftwareList(info)); } software.Info = infoItems.ToArray(); } if (item.ContainsKey(Models.Internal.Machine.SharedFeatKey) && item[Models.Internal.Machine.SharedFeatKey] is Models.Internal.SharedFeat[] sharedFeats) { var sharedFeatItems = new List(); foreach (var sharedFeat in sharedFeats) { sharedFeatItems.Add(ConvertToSoftwareList(sharedFeat)); } software.SharedFeat = sharedFeatItems.ToArray(); } if (item.ContainsKey(Models.Internal.Machine.PartKey) && item[Models.Internal.Machine.PartKey] is Models.Internal.Part[] parts) { var partItems = new List(); foreach (var part in parts) { partItems.Add(ConvertToSoftwareList(part)); } software.Part = partItems.ToArray(); } return software; } /// /// Convert from to /// public static Models.SoftwareList.DataArea ConvertToSoftwareList(Models.Internal.DataArea item) { 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), }; if (item.ContainsKey(Models.Internal.DataArea.RomKey) && item[Models.Internal.DataArea.RomKey] is Models.Internal.Rom[] roms) { var romItems = new List(); foreach (var rom in roms) { romItems.Add(ConvertToSoftwareList(rom)); } dataArea.Rom = romItems.ToArray(); } return dataArea; } /// /// Convert from to /// public static Models.SoftwareList.DipSwitch ConvertToSoftwareList(Models.Internal.DipSwitch item) { 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), }; if (item.ContainsKey(Models.Internal.DipSwitch.DipValueKey) && item[Models.Internal.DipSwitch.DipValueKey] is Models.Internal.DipValue[] dipValues) { var dipValueItems = new List(); foreach (var rom in dipValues) { dipValueItems.Add(ConvertToSoftwareList(rom)); } dipSwitch.DipValue = dipValueItems.ToArray(); } return dipSwitch; } /// /// Convert from to /// public static Models.SoftwareList.DipValue ConvertToSoftwareList(Models.Internal.DipValue item) { 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 /// public static Models.SoftwareList.Disk ConvertToSoftwareList(Models.Internal.Disk item) { 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 /// public static Models.SoftwareList.DiskArea ConvertToSoftwareList(Models.Internal.DiskArea item) { var diskArea = new Models.SoftwareList.DiskArea { Name = item.ReadString(Models.Internal.DiskArea.NameKey), }; if (item.ContainsKey(Models.Internal.DiskArea.DiskKey) && item[Models.Internal.DiskArea.DiskKey] is Models.Internal.Disk[] disks) { var diskItems = new List(); foreach (var disk in disks) { diskItems.Add(ConvertToSoftwareList(disk)); } diskArea.Disk = diskItems.ToArray(); } return diskArea; } /// /// Convert from to /// public static Models.SoftwareList.Feature ConvertToSoftwareList(Models.Internal.Feature item) { 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 /// public static Models.SoftwareList.Info ConvertToSoftwareList(Models.Internal.Info item) { 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 /// public static Models.SoftwareList.Part ConvertToSoftwareList(Models.Internal.Part item) { var part = new Models.SoftwareList.Part { Name = item.ReadString(Models.Internal.Part.NameKey), Interface = item.ReadString(Models.Internal.Part.InterfaceKey), }; if (item.ContainsKey(Models.Internal.Part.FeatureKey) && item[Models.Internal.Part.FeatureKey] is Models.Internal.Feature[] features) { var featureItems = new List(); foreach (var feature in features) { featureItems.Add(ConvertToSoftwareList(feature)); } part.Feature = featureItems.ToArray(); } if (item.ContainsKey(Models.Internal.Part.DataAreaKey) && item[Models.Internal.Part.DataAreaKey] is Models.Internal.DataArea[] dataAreas) { var dataAreaItems = new List(); foreach (var dataArea in dataAreas) { dataAreaItems.Add(ConvertToSoftwareList(dataArea)); } part.DataArea = dataAreaItems.ToArray(); } if (item.ContainsKey(Models.Internal.Part.DiskAreaKey) && item[Models.Internal.Part.DiskAreaKey] is Models.Internal.DiskArea[] diskAreas) { var diskAreaItems = new List(); foreach (var diskArea in diskAreas) { diskAreaItems.Add(ConvertToSoftwareList(diskArea)); } part.DiskArea = diskAreaItems.ToArray(); } if (item.ContainsKey(Models.Internal.Part.DipSwitchKey) && item[Models.Internal.Part.DipSwitchKey] is Models.Internal.DipSwitch[] dipSwitches) { var dipSwitchItems = new List(); foreach (var rom in dipSwitches) { dipSwitchItems.Add(ConvertToSoftwareList(rom)); } part.DipSwitch = dipSwitchItems.ToArray(); } return part; } /// /// Convert from to /// public static Models.SoftwareList.Rom ConvertToSoftwareList(Models.Internal.Rom item) { 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 /// public static Models.SoftwareList.SharedFeat ConvertToSoftwareList(Models.Internal.SharedFeat item) { var sharedFeat = new Models.SoftwareList.SharedFeat { Name = item.ReadString(Models.Internal.SharedFeat.NameKey), Value = item.ReadString(Models.Internal.SharedFeat.ValueKey), }; return sharedFeat; } #endregion } }