diff --git a/SabreTools.Serialization/Internal.SoftwareList.cs b/SabreTools.Serialization/Internal.SoftwareList.cs deleted file mode 100644 index e18c4cd5..00000000 --- a/SabreTools.Serialization/Internal.SoftwareList.cs +++ /dev/null @@ -1,562 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using SabreTools.Models.Internal; - -namespace SabreTools.Serialization -{ - /// - /// Serializer for SoftwareList models to internal structure - /// - public partial class Internal - { - #region Serialize - - /// - /// Convert from to - /// - public static MetadataFile ConvertToInternalModel(Models.SoftwareList.SoftwareList item) - { - var metadataFile = new MetadataFile - { - [MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item), - }; - - if (item?.Software != null && item.Software.Any()) - metadataFile[MetadataFile.MachineKey] = item.Software.Select(ConvertMachineToInternalModel).ToArray(); - - return metadataFile; - } - - /// - /// Convert from to - /// - private static Header ConvertHeaderToInternalModel(Models.SoftwareList.SoftwareList item) - { - var header = new Header - { - [Header.NameKey] = item.Name, - [Header.DescriptionKey] = item.Description, - [Header.NotesKey] = item.Notes, - }; - return header; - } - - /// - /// Convert from to - /// - private static Machine ConvertMachineToInternalModel(Models.SoftwareList.Software item) - { - var machine = new Machine - { - [Machine.NameKey] = item.Name, - [Machine.CloneOfKey] = item.CloneOf, - [Machine.SupportedKey] = item.Supported, - [Machine.DescriptionKey] = item.Description, - [Machine.YearKey] = item.Year, - [Machine.PublisherKey] = item.Publisher, - [Machine.NotesKey] = item.Notes, - }; - - if (item.Info != null && item.Info.Any()) - { - var infos = new List(); - foreach (var info in item.Info) - { - infos.Add(ConvertToInternalModel(info)); - } - machine[Machine.InfoKey] = infos.ToArray(); - } - - if (item.SharedFeat != null && item.SharedFeat.Any()) - { - var sharedFeats = new List(); - foreach (var sharedFeat in item.SharedFeat) - { - sharedFeats.Add(ConvertToInternalModel(sharedFeat)); - } - machine[Machine.SharedFeatKey] = sharedFeats.ToArray(); - } - - if (item.Part != null && item.Part.Any()) - { - var parts = new List(); - foreach (var part in item.Part) - { - parts.Add(ConvertToInternalModel(part)); - } - machine[Machine.PartKey] = parts.ToArray(); - } - - return machine; - } - - /// - /// Convert from to - /// - private static DataArea ConvertToInternalModel(Models.SoftwareList.DataArea item) - { - var dataArea = new DataArea - { - [DataArea.NameKey] = item.Name, - [DataArea.SizeKey] = item.Size, - [DataArea.WidthKey] = item.Width, - [DataArea.EndiannessKey] = item.Endianness, - }; - - if (item.Rom != null && item.Rom.Any()) - { - var roms = new List(); - foreach (var rom in item.Rom) - { - roms.Add(ConvertToInternalModel(rom)); - } - dataArea[DataArea.RomKey] = roms.ToArray(); - } - - return dataArea; - } - - /// - /// Convert from to - /// - private static DipSwitch ConvertToInternalModel(Models.SoftwareList.DipSwitch item) - { - var dipSwitch = new DipSwitch - { - [DipSwitch.NameKey] = item.Name, - [DipSwitch.TagKey] = item.Tag, - [DipSwitch.MaskKey] = item.Mask, - }; - - if (item.DipValue != null && item.DipValue.Any()) - { - var dipValues = new List(); - foreach (var dipValue in item.DipValue) - { - dipValues.Add(ConvertToInternalModel(dipValue)); - } - dipSwitch[DipSwitch.DipValueKey] = dipValues.ToArray(); - } - - return dipSwitch; - } - - /// - /// Convert from to - /// - private static DipValue ConvertToInternalModel(Models.SoftwareList.DipValue item) - { - var dipValue = new DipValue - { - [DipValue.NameKey] = item.Name, - [DipValue.ValueKey] = item.Value, - [DipValue.DefaultKey] = item.Default, - }; - return dipValue; - } - - /// - /// Convert from to - /// - private static Disk ConvertToInternalModel(Models.SoftwareList.Disk item) - { - var disk = new Disk - { - [Disk.NameKey] = item.Name, - [Disk.MD5Key] = item.MD5, - [Disk.SHA1Key] = item.SHA1, - [Disk.StatusKey] = item.Status, - [Disk.WritableKey] = item.Writeable, - }; - return disk; - } - - /// - /// Convert from to - /// - private static DiskArea ConvertToInternalModel(Models.SoftwareList.DiskArea item) - { - var diskArea = new DiskArea - { - [DiskArea.NameKey] = item.Name, - }; - - if (item.Disk != null && item.Disk.Any()) - { - var roms = new List(); - foreach (var disk in item.Disk) - { - roms.Add(ConvertToInternalModel(disk)); - } - diskArea[DiskArea.DiskKey] = roms.ToArray(); - } - - return diskArea; - } - - /// - /// Convert from to - /// - private static Feature ConvertToInternalModel(Models.SoftwareList.Feature item) - { - var feature = new Feature - { - [Feature.NameKey] = item.Name, - [Feature.ValueKey] = item.Value, - }; - return feature; - } - - /// - /// Convert from to - /// - private static Info ConvertToInternalModel(Models.SoftwareList.Info item) - { - var info = new Info - { - [Info.NameKey] = item.Name, - [Info.ValueKey] = item.Value, - }; - return info; - } - - /// - /// Convert from to - /// - private static Part ConvertToInternalModel(Models.SoftwareList.Part item) - { - var part = new Part - { - [Part.NameKey] = item.Name, - [Part.InterfaceKey] = item.Interface, - }; - - if (item.Feature != null && item.Feature.Any()) - { - var features = new List(); - foreach (var feature in item.Feature) - { - features.Add(ConvertToInternalModel(feature)); - } - part[Part.FeatureKey] = features.ToArray(); - } - - if (item.DataArea != null && item.DataArea.Any()) - { - var dataAreas = new List(); - foreach (var dataArea in item.DataArea) - { - dataAreas.Add(ConvertToInternalModel(dataArea)); - } - part[Part.DataAreaKey] = dataAreas.ToArray(); - } - - if (item.DiskArea != null && item.DiskArea.Any()) - { - var diskAreas = new List(); - foreach (var diskArea in item.DiskArea) - { - diskAreas.Add(ConvertToInternalModel(diskArea)); - } - part[Part.DiskAreaKey] = diskAreas.ToArray(); - } - - if (item.DipSwitch != null && item.DipSwitch.Any()) - { - var dipSwitches = new List(); - foreach (var rom in item.DipSwitch) - { - dipSwitches.Add(ConvertToInternalModel(rom)); - } - part[Part.DipSwitchKey] = dipSwitches.ToArray(); - } - - return part; - } - - /// - /// Convert from to - /// - private static Rom ConvertToInternalModel(Models.SoftwareList.Rom item) - { - var rom = new Rom - { - [Rom.NameKey] = item.Name, - [Rom.SizeKey] = item.Size, - [Rom.LengthKey] = item.Length, - [Rom.CRCKey] = item.CRC, - [Rom.SHA1Key] = item.SHA1, - [Rom.OffsetKey] = item.Offset, - [Rom.ValueKey] = item.Value, - [Rom.StatusKey] = item.Status, - [Rom.LoadFlagKey] = item.LoadFlag, - }; - return rom; - } - - /// - /// Convert from to - /// - private static SharedFeat ConvertToInternalModel(Models.SoftwareList.SharedFeat item) - { - var sharedFeat = new SharedFeat - { - [SharedFeat.NameKey] = item.Name, - [SharedFeat.ValueKey] = item.Value, - }; - return sharedFeat; - } - - #endregion - - #region Deserialize - - /// - /// Convert from to - /// - public static Models.SoftwareList.SoftwareList? ConvertHeaderToSoftwareList(Header? item) - { - if (item == null) - return null; - - var softwareList = new Models.SoftwareList.SoftwareList - { - Name = item.ReadString(Header.NameKey), - Description = item.ReadString(Header.DescriptionKey), - Notes = item.ReadString(Header.NotesKey), - }; - return softwareList; - } - - /// - /// Convert from to - /// - public static Models.SoftwareList.Software? ConvertMachineToSoftwareList(Machine? item) - { - if (item == null) - return null; - - var software = new Models.SoftwareList.Software - { - Name = item.ReadString(Machine.NameKey), - CloneOf = item.ReadString(Machine.CloneOfKey), - Supported = item.ReadString(Machine.SupportedKey), - Description = item.ReadString(Machine.DescriptionKey), - Year = item.ReadString(Machine.YearKey), - Publisher = item.ReadString(Machine.PublisherKey), - Notes = item.ReadString(Machine.NotesKey), - }; - - var infos = item.Read(Machine.InfoKey); - software.Info = infos?.Select(ConvertToSoftwareList)?.ToArray(); - - var sharedFeats = item.Read(Machine.SharedFeatKey); - software.SharedFeat = sharedFeats?.Select(ConvertToSoftwareList)?.ToArray(); - - var parts = item.Read(Machine.PartKey); - software.Part = parts?.Select(ConvertToSoftwareList)?.ToArray(); - - return software; - } - - /// - /// Convert from to - /// - private static Models.SoftwareList.DataArea? ConvertToSoftwareList(DataArea? item) - { - if (item == null) - return null; - - var dataArea = new Models.SoftwareList.DataArea - { - Name = item.ReadString(DataArea.NameKey), - Size = item.ReadString(DataArea.SizeKey), - Width = item.ReadString(DataArea.WidthKey), - Endianness = item.ReadString(DataArea.EndiannessKey), - }; - - var roms = item.Read(DataArea.RomKey); - dataArea.Rom = roms?.Select(ConvertToSoftwareList)?.ToArray(); - - return dataArea; - } - - /// - /// Convert from to - /// - private static Models.SoftwareList.DipSwitch? ConvertToSoftwareList(DipSwitch? item) - { - if (item == null) - return null; - - var dipSwitch = new Models.SoftwareList.DipSwitch - { - Name = item.ReadString(DipSwitch.NameKey), - Tag = item.ReadString(DipSwitch.TagKey), - Mask = item.ReadString(DipSwitch.MaskKey), - }; - - var dipValues = item.Read(DipSwitch.DipValueKey); - dipSwitch.DipValue = dipValues?.Select(ConvertToSoftwareList)?.ToArray(); - - return dipSwitch; - } - - /// - /// Convert from to - /// - private static Models.SoftwareList.DipValue? ConvertToSoftwareList(DipValue? item) - { - if (item == null) - return null; - - var dipValue = new Models.SoftwareList.DipValue - { - Name = item.ReadString(DipValue.NameKey), - Value = item.ReadString(DipValue.ValueKey), - Default = item.ReadString(DipValue.DefaultKey), - }; - return dipValue; - } - - /// - /// Convert from to - /// - private static Models.SoftwareList.Disk? ConvertToSoftwareList(Disk? item) - { - if (item == null) - return null; - - var disk = new Models.SoftwareList.Disk - { - Name = item.ReadString(Disk.NameKey), - MD5 = item.ReadString(Disk.MD5Key), - SHA1 = item.ReadString(Disk.SHA1Key), - Status = item.ReadString(Disk.StatusKey), - Writeable = item.ReadString(Disk.WritableKey), - }; - return disk; - } - - /// - /// Convert from to - /// - private static Models.SoftwareList.DiskArea? ConvertToSoftwareList(DiskArea? item) - { - if (item == null) - return null; - - var diskArea = new Models.SoftwareList.DiskArea - { - Name = item.ReadString(DiskArea.NameKey), - }; - - var disks = item.Read(DiskArea.DiskKey); - diskArea.Disk = disks?.Select(ConvertToSoftwareList)?.ToArray(); - - return diskArea; - } - - /// - /// Convert from to - /// - private static Models.SoftwareList.Feature? ConvertToSoftwareList(Feature? item) - { - if (item == null) - return null; - - var feature = new Models.SoftwareList.Feature - { - Name = item.ReadString(Feature.NameKey), - Value = item.ReadString(Feature.ValueKey), - }; - return feature; - } - - /// - /// Convert from to - /// - private static Models.SoftwareList.Info? ConvertToSoftwareList(Info? item) - { - if (item == null) - return null; - - var info = new Models.SoftwareList.Info - { - Name = item.ReadString(Info.NameKey), - Value = item.ReadString(Info.ValueKey), - }; - return info; - } - - /// - /// Convert from to - /// - private static Models.SoftwareList.Part? ConvertToSoftwareList(Part? item) - { - if (item == null) - return null; - - var part = new Models.SoftwareList.Part - { - Name = item.ReadString(Part.NameKey), - Interface = item.ReadString(Part.InterfaceKey), - }; - - var features = item.Read(Part.FeatureKey); - part.Feature = features?.Select(ConvertToSoftwareList)?.ToArray(); - - var dataAreas = item.Read(Part.DataAreaKey); - part.DataArea = dataAreas?.Select(ConvertToSoftwareList)?.ToArray(); - - var diskAreas = item.Read(Part.DiskAreaKey); - part.DiskArea = diskAreas?.Select(ConvertToSoftwareList)?.ToArray(); - - var dipSwitches = item.Read(Part.DipSwitchKey); - part.DipSwitch = dipSwitches?.Select(ConvertToSoftwareList)?.ToArray(); - - return part; - } - - /// - /// Convert from to - /// - private static Models.SoftwareList.Rom? ConvertToSoftwareList(Rom? item) - { - if (item == null) - return null; - - var rom = new Models.SoftwareList.Rom - { - Name = item.ReadString(Rom.NameKey), - Size = item.ReadString(Rom.SizeKey), - Length = item.ReadString(Rom.LengthKey), - CRC = item.ReadString(Rom.CRCKey), - SHA1 = item.ReadString(Rom.SHA1Key), - Offset = item.ReadString(Rom.OffsetKey), - Value = item.ReadString(Rom.ValueKey), - Status = item.ReadString(Rom.StatusKey), - LoadFlag = item.ReadString(Rom.LoadFlagKey), - }; - return rom; - } - - /// - /// Convert from to - /// - private static Models.SoftwareList.SharedFeat? ConvertToSoftwareList(SharedFeat? item) - { - if (item == null) - return null; - - var sharedFeat = new Models.SoftwareList.SharedFeat - { - Name = item.ReadString(SharedFeat.NameKey), - Value = item.ReadString(SharedFeat.ValueKey), - }; - return sharedFeat; - } - - #endregion - } -} \ No newline at end of file diff --git a/SabreTools.Serialization/SoftwareList.Deserializer.cs b/SabreTools.Serialization/SoftwareList.Deserializer.cs new file mode 100644 index 00000000..3b30a496 --- /dev/null +++ b/SabreTools.Serialization/SoftwareList.Deserializer.cs @@ -0,0 +1,262 @@ +using System.Linq; +using SabreTools.Models.SoftwareList; + +namespace SabreTools.Serialization +{ + /// + /// XML deserializer for MAME softwarelist files + /// + public partial class SoftawreList : XmlSerializer + { + // TODO: Add deserialization of entire SoftwareList + #region Deserialize + + /// + /// Convert from to + /// + public static SoftwareList? ConvertHeaderFromInternalModel(Models.Internal.Header? item) + { + if (item == null) + return null; + + var softwareList = new 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 Software? ConvertMachineFromInternalModel(Models.Internal.Machine? item) + { + if (item == null) + return null; + + var software = new 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(ConvertFromInternalModel)?.ToArray(); + + var sharedFeats = item.Read(Models.Internal.Machine.SharedFeatKey); + software.SharedFeat = sharedFeats?.Select(ConvertFromInternalModel)?.ToArray(); + + var parts = item.Read(Models.Internal.Machine.PartKey); + software.Part = parts?.Select(ConvertFromInternalModel)?.ToArray(); + + return software; + } + + /// + /// Convert from to + /// + private static DataArea? ConvertFromInternalModel(Models.Internal.DataArea? item) + { + if (item == null) + return null; + + var dataArea = new 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(ConvertFromInternalModel)?.ToArray(); + + return dataArea; + } + + /// + /// Convert from to + /// + private static DipSwitch? ConvertFromInternalModel(Models.Internal.DipSwitch? item) + { + if (item == null) + return null; + + var dipSwitch = new 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(ConvertFromInternalModel)?.ToArray(); + + return dipSwitch; + } + + /// + /// Convert from to + /// + private static DipValue? ConvertFromInternalModel(Models.Internal.DipValue? item) + { + if (item == null) + return null; + + var dipValue = new 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 Disk? ConvertFromInternalModel(Models.Internal.Disk? item) + { + if (item == null) + return null; + + var disk = new 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 DiskArea? ConvertFromInternalModel(Models.Internal.DiskArea? item) + { + if (item == null) + return null; + + var diskArea = new DiskArea + { + Name = item.ReadString(Models.Internal.DiskArea.NameKey), + }; + + var disks = item.Read(Models.Internal.DiskArea.DiskKey); + diskArea.Disk = disks?.Select(ConvertFromInternalModel)?.ToArray(); + + return diskArea; + } + + /// + /// Convert from to + /// + private static Feature? ConvertFromInternalModel(Models.Internal.Feature? item) + { + if (item == null) + return null; + + var feature = new Feature + { + Name = item.ReadString(Models.Internal.Feature.NameKey), + Value = item.ReadString(Models.Internal.Feature.ValueKey), + }; + return feature; + } + + /// + /// Convert from to + /// + private static Info? ConvertFromInternalModel(Models.Internal.Info? item) + { + if (item == null) + return null; + + var info = new Info + { + Name = item.ReadString(Models.Internal.Info.NameKey), + Value = item.ReadString(Models.Internal.Info.ValueKey), + }; + return info; + } + + /// + /// Convert from to + /// + private static Part? ConvertFromInternalModel(Models.Internal.Part? item) + { + if (item == null) + return null; + + var part = new 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(ConvertFromInternalModel)?.ToArray(); + + var dataAreas = item.Read(Models.Internal.Part.DataAreaKey); + part.DataArea = dataAreas?.Select(ConvertFromInternalModel)?.ToArray(); + + var diskAreas = item.Read(Models.Internal.Part.DiskAreaKey); + part.DiskArea = diskAreas?.Select(ConvertFromInternalModel)?.ToArray(); + + var dipSwitches = item.Read(Models.Internal.Part.DipSwitchKey); + part.DipSwitch = dipSwitches?.Select(ConvertFromInternalModel)?.ToArray(); + + return part; + } + + /// + /// Convert from to + /// + private static Rom? ConvertFromInternalModel(Models.Internal.Rom? item) + { + if (item == null) + return null; + + var rom = new 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 SharedFeat? ConvertFromInternalModel(Models.Internal.SharedFeat? item) + { + if (item == null) + return null; + + var sharedFeat = new 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/SoftwareList.Serializer.cs b/SabreTools.Serialization/SoftwareList.Serializer.cs new file mode 100644 index 00000000..ec4d4de6 --- /dev/null +++ b/SabreTools.Serialization/SoftwareList.Serializer.cs @@ -0,0 +1,250 @@ +using System.IO; +using System.Linq; +using SabreTools.Models.SoftwareList; + +namespace SabreTools.Serialization +{ + /// + /// XML serializer for MAME softwarelist files + /// + public partial class SoftawreList : XmlSerializer + { + /// + public static bool SerializeToFileWithDocType(SoftwareList obj, string path) + => SerializeToFile(obj, path, DocTypeName, DocTypePubId, DocTypeSysId, DocTypeSysId); + + /// + public static Stream? SerializeToStreamWithDocType(SoftwareList obj, string path) + => SerializeToStream(obj, DocTypeName, DocTypePubId, DocTypeSysId, DocTypeSysId); + + #region Internal + + /// + /// Convert from to + /// + public static Models.Internal.MetadataFile ConvertToInternalModel(SoftwareList item) + { + var metadataFile = new Models.Internal.MetadataFile + { + [Models.Internal.MetadataFile.HeaderKey] = ConvertHeaderToInternalModel(item), + }; + + if (item?.Software != null && item.Software.Any()) + metadataFile[Models.Internal.MetadataFile.MachineKey] = item.Software.Select(ConvertMachineToInternalModel).ToArray(); + + return metadataFile; + } + + /// + /// Convert from to + /// + private static Models.Internal.Header ConvertHeaderToInternalModel(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 + /// + private static Models.Internal.Machine ConvertMachineToInternalModel(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()) + machine[Models.Internal.Machine.InfoKey] = item.Info.Select(ConvertToInternalModel).ToArray(); + + if (item.SharedFeat != null && item.SharedFeat.Any()) + machine[Models.Internal.Machine.SharedFeatKey] = item.SharedFeat.Select(ConvertToInternalModel).ToArray(); + + if (item.Part != null && item.Part.Any()) + machine[Models.Internal.Machine.PartKey] = item.Part.Select(ConvertToInternalModel).ToArray(); + + return machine; + } + + /// + /// Convert from to + /// + private static Models.Internal.DataArea ConvertToInternalModel(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()) + dataArea[Models.Internal.DataArea.RomKey] = item.Rom.Select(ConvertToInternalModel).ToArray(); + + return dataArea; + } + + /// + /// Convert from to + /// + private static Models.Internal.DipSwitch ConvertToInternalModel(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()) + dipSwitch[Models.Internal.DipSwitch.DipValueKey] = item.DipValue.Select(ConvertToInternalModel).ToArray(); + + return dipSwitch; + } + + /// + /// Convert from to + /// + private static Models.Internal.DipValue ConvertToInternalModel(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 + /// + private static Models.Internal.Disk ConvertToInternalModel(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 + /// + private static Models.Internal.DiskArea ConvertToInternalModel(DiskArea item) + { + var diskArea = new Models.Internal.DiskArea + { + [Models.Internal.DiskArea.NameKey] = item.Name, + }; + + if (item.Disk != null && item.Disk.Any()) + diskArea[Models.Internal.DiskArea.DiskKey] = item.Disk.Select(ConvertToInternalModel).ToArray(); + + return diskArea; + } + + /// + /// Convert from to + /// + private static Models.Internal.Feature ConvertToInternalModel(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 + /// + private static Models.Internal.Info ConvertToInternalModel(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 + /// + private static Models.Internal.Part ConvertToInternalModel(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()) + part[Models.Internal.Part.FeatureKey] = item.Feature.Select(ConvertToInternalModel).ToArray(); + + if (item.DataArea != null && item.DataArea.Any()) + part[Models.Internal.Part.DataAreaKey] = item.DataArea.Select(ConvertToInternalModel).ToArray(); + + if (item.DiskArea != null && item.DiskArea.Any()) + part[Models.Internal.Part.DiskAreaKey] = item.DiskArea.Select(ConvertToInternalModel).ToArray(); + + if (item.DipSwitch != null && item.DipSwitch.Any()) + part[Models.Internal.Part.DipSwitchKey] = item.DipSwitch.Select(ConvertToInternalModel).ToArray(); + + return part; + } + + /// + /// Convert from to + /// + private static Models.Internal.Rom ConvertToInternalModel(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 + /// + private static Models.Internal.SharedFeat ConvertToInternalModel(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 diff --git a/SabreTools.Serialization/SoftwareList.cs b/SabreTools.Serialization/SoftwareList.cs index 68f9f451..dcddca58 100644 --- a/SabreTools.Serialization/SoftwareList.cs +++ b/SabreTools.Serialization/SoftwareList.cs @@ -1,11 +1,9 @@ -using System.IO; - namespace SabreTools.Serialization { /// /// XML deserializer for MAME softwarelist files /// - public class SoftawreList : XmlSerializer + public partial class SoftawreList : XmlSerializer { /// /// name field for DOCTYPE @@ -26,13 +24,5 @@ namespace SabreTools.Serialization /// subset field for DOCTYPE /// public const string? DocTypeSubset = null; - - /// - public static bool SerializeToFileWithDocType(Models.SoftwareList.SoftwareList obj, string path) - => SerializeToFile(obj, path, DocTypeName, DocTypePubId, DocTypeSysId, DocTypeSysId); - - /// - public static Stream? SerializeToStreamWithDocType(Models.SoftwareList.SoftwareList obj, string path) - => SerializeToStream(obj, DocTypeName, DocTypePubId, DocTypeSysId, DocTypeSysId); } } \ No newline at end of file