diff --git a/SabreTools.Serialization/Internal.SoftwareList.cs b/SabreTools.Serialization/Internal.SoftwareList.cs index 586df690..5c9aaa73 100644 --- a/SabreTools.Serialization/Internal.SoftwareList.cs +++ b/SabreTools.Serialization/Internal.SoftwareList.cs @@ -10,6 +10,55 @@ namespace SabreTools.Serialization { #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 /// @@ -231,6 +280,55 @@ namespace SabreTools.Serialization #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 ///