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