From 48acd92504f6095934e275830e0f31599c8233ab Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Fri, 4 Aug 2023 21:52:14 -0400 Subject: [PATCH] Add SoftwareList internal converters --- .../Internal.Deserializer.cs | 221 ++++++++++++++++++ .../Internal.Serializer.cs | 221 ++++++++++++++++++ 2 files changed, 442 insertions(+) diff --git a/SabreTools.Serialization/Internal.Deserializer.cs b/SabreTools.Serialization/Internal.Deserializer.cs index dbcc1263..f6bf9dd2 100644 --- a/SabreTools.Serialization/Internal.Deserializer.cs +++ b/SabreTools.Serialization/Internal.Deserializer.cs @@ -1415,5 +1415,226 @@ namespace SabreTools.Serialization } #endregion + + #region SoftwareList + + /// + /// 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 } } \ No newline at end of file diff --git a/SabreTools.Serialization/Internal.Serializer.cs b/SabreTools.Serialization/Internal.Serializer.cs index a5f5f11b..f53ad8e8 100644 --- a/SabreTools.Serialization/Internal.Serializer.cs +++ b/SabreTools.Serialization/Internal.Serializer.cs @@ -1372,5 +1372,226 @@ namespace SabreTools.Serialization } #endregion + + #region SoftwareList + + /// + /// 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 } } \ No newline at end of file