diff --git a/SabreTools.Data.Extensions.Test/MetadataExtensionsTests.cs b/SabreTools.Data.Extensions.Test/MetadataExtensionsTests.cs index 2502bc3c..5248b23c 100644 --- a/SabreTools.Data.Extensions.Test/MetadataExtensionsTests.cs +++ b/SabreTools.Data.Extensions.Test/MetadataExtensionsTests.cs @@ -1851,6 +1851,19 @@ namespace SabreTools.Data.Extensions.Test Assert.Equal(expected, actual); } + [Theory] + [InlineData(null, null)] + [InlineData("INVALID", null)] + [InlineData("yes", true)] + [InlineData("True", true)] + [InlineData("no", false)] + [InlineData("False", false)] + public void AsYesNoTest(string? field, bool? expected) + { + bool? actual = field.AsYesNo(); + Assert.Equal(expected, actual); + } + #endregion #region Enum to String @@ -2137,6 +2150,16 @@ namespace SabreTools.Data.Extensions.Test Assert.Equal(expected, actual); } + [Theory] + [InlineData(null, null)] + [InlineData(true, "yes")] + [InlineData(false, "no")] + public void FromYesNo(bool? field, string? expected) + { + string? actual = field.FromYesNo(); + Assert.Equal(expected, actual); + } + #endregion } } diff --git a/SabreTools.Data.Extensions/MetadataExtensions.cs b/SabreTools.Data.Extensions/MetadataExtensions.cs index 2a96b95c..59643ac3 100644 --- a/SabreTools.Data.Extensions/MetadataExtensions.cs +++ b/SabreTools.Data.Extensions/MetadataExtensions.cs @@ -1214,6 +1214,21 @@ namespace SabreTools.Data.Extensions }; } + /// + /// Get bool? value from input string + /// + /// String to get value from + /// bool? corresponding to the string + public static bool? AsYesNo(this string? yesno) + { + return yesno?.ToLowerInvariant() switch + { + "yes" or "true" => true, + "no" or "false" => false, + _ => null, + }; + } + #endregion #region Enum to String @@ -1574,7 +1589,21 @@ namespace SabreTools.Data.Extensions }; } - #endregion + /// + /// Get string value from input bool? + /// + /// bool? to get value from + /// String corresponding to the bool? + public static string? FromYesNo(this bool? yesno) + { + return yesno switch + { + true => "yes", + false => "no", + _ => null, + }; + } + #endregion } } diff --git a/SabreTools.Metadata.DatItems.Test/DatItemTests.cs b/SabreTools.Metadata.DatItems.Test/DatItemTests.cs index 68b5c664..36c66ca4 100644 --- a/SabreTools.Metadata.DatItems.Test/DatItemTests.cs +++ b/SabreTools.Metadata.DatItems.Test/DatItemTests.cs @@ -1,3 +1,4 @@ +using SabreTools.Data.Extensions; using SabreTools.Metadata.DatItems.Formats; using Xunit; diff --git a/SabreTools.Metadata.DatItems/DatItemT.cs b/SabreTools.Metadata.DatItems/DatItemT.cs index c24b7094..f0386246 100644 --- a/SabreTools.Metadata.DatItems/DatItemT.cs +++ b/SabreTools.Metadata.DatItems/DatItemT.cs @@ -1,4 +1,5 @@ using System; +using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems { diff --git a/SabreTools.Metadata.DatItems/Formats/Adjuster.cs b/SabreTools.Metadata.DatItems/Formats/Adjuster.cs index 6112a014..fa62b24d 100644 --- a/SabreTools.Metadata.DatItems/Formats/Adjuster.cs +++ b/SabreTools.Metadata.DatItems/Formats/Adjuster.cs @@ -1,5 +1,6 @@ using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { diff --git a/SabreTools.Metadata.DatItems/Formats/Analog.cs b/SabreTools.Metadata.DatItems/Formats/Analog.cs index 610dc644..02e9c43f 100644 --- a/SabreTools.Metadata.DatItems/Formats/Analog.cs +++ b/SabreTools.Metadata.DatItems/Formats/Analog.cs @@ -1,5 +1,6 @@ using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { diff --git a/SabreTools.Metadata.DatItems/Formats/Archive.cs b/SabreTools.Metadata.DatItems/Formats/Archive.cs index ba2bed03..3cdb978d 100644 --- a/SabreTools.Metadata.DatItems/Formats/Archive.cs +++ b/SabreTools.Metadata.DatItems/Formats/Archive.cs @@ -1,5 +1,6 @@ using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { diff --git a/SabreTools.Metadata.DatItems/Formats/BiosSet.cs b/SabreTools.Metadata.DatItems/Formats/BiosSet.cs index cb92be6b..bb47ae1d 100644 --- a/SabreTools.Metadata.DatItems/Formats/BiosSet.cs +++ b/SabreTools.Metadata.DatItems/Formats/BiosSet.cs @@ -1,5 +1,6 @@ using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { diff --git a/SabreTools.Metadata.DatItems/Formats/ConfLocation.cs b/SabreTools.Metadata.DatItems/Formats/ConfLocation.cs index 71e0e90c..78750d68 100644 --- a/SabreTools.Metadata.DatItems/Formats/ConfLocation.cs +++ b/SabreTools.Metadata.DatItems/Formats/ConfLocation.cs @@ -1,5 +1,6 @@ using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { diff --git a/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs b/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs index 2bf6ee52..82804d7a 100644 --- a/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs +++ b/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs @@ -1,5 +1,6 @@ using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { diff --git a/SabreTools.Metadata.DatItems/Formats/Configuration.cs b/SabreTools.Metadata.DatItems/Formats/Configuration.cs index aa1e34e7..6e1521ce 100644 --- a/SabreTools.Metadata.DatItems/Formats/Configuration.cs +++ b/SabreTools.Metadata.DatItems/Formats/Configuration.cs @@ -1,6 +1,7 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { diff --git a/SabreTools.Metadata.DatItems/Formats/DeviceRef.cs b/SabreTools.Metadata.DatItems/Formats/DeviceRef.cs index 656ffd97..9814037f 100644 --- a/SabreTools.Metadata.DatItems/Formats/DeviceRef.cs +++ b/SabreTools.Metadata.DatItems/Formats/DeviceRef.cs @@ -1,5 +1,6 @@ using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { diff --git a/SabreTools.Metadata.DatItems/Formats/DipLocation.cs b/SabreTools.Metadata.DatItems/Formats/DipLocation.cs index da5beb4d..6e92ee74 100644 --- a/SabreTools.Metadata.DatItems/Formats/DipLocation.cs +++ b/SabreTools.Metadata.DatItems/Formats/DipLocation.cs @@ -1,5 +1,6 @@ using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { diff --git a/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs b/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs index 71f0e90a..c0f9e1d2 100644 --- a/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs +++ b/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs @@ -1,6 +1,7 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { diff --git a/SabreTools.Metadata.DatItems/Formats/DipValue.cs b/SabreTools.Metadata.DatItems/Formats/DipValue.cs index 86b2df6e..6380d250 100644 --- a/SabreTools.Metadata.DatItems/Formats/DipValue.cs +++ b/SabreTools.Metadata.DatItems/Formats/DipValue.cs @@ -1,5 +1,6 @@ using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { diff --git a/SabreTools.Metadata.DatItems/Formats/DiskArea.cs b/SabreTools.Metadata.DatItems/Formats/DiskArea.cs index ba8679eb..00f13f02 100644 --- a/SabreTools.Metadata.DatItems/Formats/DiskArea.cs +++ b/SabreTools.Metadata.DatItems/Formats/DiskArea.cs @@ -1,5 +1,6 @@ using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { diff --git a/SabreTools.Metadata.DatItems/Formats/Extension.cs b/SabreTools.Metadata.DatItems/Formats/Extension.cs index a5954714..4f2bfe5f 100644 --- a/SabreTools.Metadata.DatItems/Formats/Extension.cs +++ b/SabreTools.Metadata.DatItems/Formats/Extension.cs @@ -1,5 +1,6 @@ using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { diff --git a/SabreTools.Metadata.DatItems/Formats/Info.cs b/SabreTools.Metadata.DatItems/Formats/Info.cs index 29cd1c44..4232db88 100644 --- a/SabreTools.Metadata.DatItems/Formats/Info.cs +++ b/SabreTools.Metadata.DatItems/Formats/Info.cs @@ -1,5 +1,6 @@ using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { diff --git a/SabreTools.Metadata.DatItems/Formats/Input.cs b/SabreTools.Metadata.DatItems/Formats/Input.cs index 2517eef2..a44300d0 100644 --- a/SabreTools.Metadata.DatItems/Formats/Input.cs +++ b/SabreTools.Metadata.DatItems/Formats/Input.cs @@ -1,6 +1,7 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { diff --git a/SabreTools.Metadata.DatItems/Formats/Instance.cs b/SabreTools.Metadata.DatItems/Formats/Instance.cs index 2f5892da..f2f7e954 100644 --- a/SabreTools.Metadata.DatItems/Formats/Instance.cs +++ b/SabreTools.Metadata.DatItems/Formats/Instance.cs @@ -1,5 +1,6 @@ using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { diff --git a/SabreTools.Metadata.DatItems/Formats/Part.cs b/SabreTools.Metadata.DatItems/Formats/Part.cs index b5dd61c3..32c2fed4 100644 --- a/SabreTools.Metadata.DatItems/Formats/Part.cs +++ b/SabreTools.Metadata.DatItems/Formats/Part.cs @@ -1,5 +1,6 @@ using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { diff --git a/SabreTools.Metadata.DatItems/Formats/Port.cs b/SabreTools.Metadata.DatItems/Formats/Port.cs index 168c5f55..84eaf426 100644 --- a/SabreTools.Metadata.DatItems/Formats/Port.cs +++ b/SabreTools.Metadata.DatItems/Formats/Port.cs @@ -1,6 +1,7 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { diff --git a/SabreTools.Metadata.DatItems/Formats/RamOption.cs b/SabreTools.Metadata.DatItems/Formats/RamOption.cs index 6c90c80b..50e32990 100644 --- a/SabreTools.Metadata.DatItems/Formats/RamOption.cs +++ b/SabreTools.Metadata.DatItems/Formats/RamOption.cs @@ -1,5 +1,6 @@ using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { diff --git a/SabreTools.Metadata.DatItems/Formats/Release.cs b/SabreTools.Metadata.DatItems/Formats/Release.cs index 5a50584a..2eaf01ab 100644 --- a/SabreTools.Metadata.DatItems/Formats/Release.cs +++ b/SabreTools.Metadata.DatItems/Formats/Release.cs @@ -1,5 +1,6 @@ using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { diff --git a/SabreTools.Metadata.DatItems/Formats/Sample.cs b/SabreTools.Metadata.DatItems/Formats/Sample.cs index 2fe98f31..c1c50baa 100644 --- a/SabreTools.Metadata.DatItems/Formats/Sample.cs +++ b/SabreTools.Metadata.DatItems/Formats/Sample.cs @@ -1,5 +1,6 @@ using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { diff --git a/SabreTools.Metadata.DatItems/Formats/SharedFeat.cs b/SabreTools.Metadata.DatItems/Formats/SharedFeat.cs index e7bf6d93..274cb9f7 100644 --- a/SabreTools.Metadata.DatItems/Formats/SharedFeat.cs +++ b/SabreTools.Metadata.DatItems/Formats/SharedFeat.cs @@ -1,5 +1,6 @@ using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { diff --git a/SabreTools.Metadata.DatItems/Formats/Slot.cs b/SabreTools.Metadata.DatItems/Formats/Slot.cs index d666df9b..8e8efced 100644 --- a/SabreTools.Metadata.DatItems/Formats/Slot.cs +++ b/SabreTools.Metadata.DatItems/Formats/Slot.cs @@ -1,6 +1,7 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { diff --git a/SabreTools.Metadata.DatItems/Formats/SlotOption.cs b/SabreTools.Metadata.DatItems/Formats/SlotOption.cs index f36080b1..2fa4718c 100644 --- a/SabreTools.Metadata.DatItems/Formats/SlotOption.cs +++ b/SabreTools.Metadata.DatItems/Formats/SlotOption.cs @@ -1,5 +1,6 @@ using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { diff --git a/SabreTools.Metadata.DatItems/Formats/Sound.cs b/SabreTools.Metadata.DatItems/Formats/Sound.cs index 85649293..27fbde3a 100644 --- a/SabreTools.Metadata.DatItems/Formats/Sound.cs +++ b/SabreTools.Metadata.DatItems/Formats/Sound.cs @@ -1,5 +1,6 @@ using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { diff --git a/SabreTools.Metadata.DatItems/Trurip.cs b/SabreTools.Metadata.DatItems/Trurip.cs index 2aee3148..0541824c 100644 --- a/SabreTools.Metadata.DatItems/Trurip.cs +++ b/SabreTools.Metadata.DatItems/Trurip.cs @@ -1,6 +1,7 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems { diff --git a/SabreTools.Metadata.Filter/FilterObject.cs b/SabreTools.Metadata.Filter/FilterObject.cs index c3e0df41..30cefbd7 100644 --- a/SabreTools.Metadata.Filter/FilterObject.cs +++ b/SabreTools.Metadata.Filter/FilterObject.cs @@ -1,5 +1,6 @@ using System; using System.Text.RegularExpressions; +using SabreTools.Data.Extensions; using SabreTools.Data.Models.Metadata; using SabreTools.Text.Extensions; diff --git a/SabreTools.Metadata.Test/ConvertersTests.cs b/SabreTools.Metadata.Test/ConvertersTests.cs deleted file mode 100644 index 725aa233..00000000 --- a/SabreTools.Metadata.Test/ConvertersTests.cs +++ /dev/null @@ -1,38 +0,0 @@ -using Xunit; - -namespace SabreTools.Metadata.Test -{ - public class ConvertersTests - { - #region String to Enum - - [Theory] - [InlineData(null, null)] - [InlineData("INVALID", null)] - [InlineData("yes", true)] - [InlineData("True", true)] - [InlineData("no", false)] - [InlineData("False", false)] - public void AsYesNoTest(string? field, bool? expected) - { - bool? actual = field.AsYesNo(); - Assert.Equal(expected, actual); - } - - #endregion - - #region Enum to String - - [Theory] - [InlineData(null, null)] - [InlineData(true, "yes")] - [InlineData(false, "no")] - public void FromYesNo(bool? field, string? expected) - { - string? actual = field.FromYesNo(); - Assert.Equal(expected, actual); - } - - #endregion - } -} diff --git a/SabreTools.Metadata/Converters.cs b/SabreTools.Metadata/Converters.cs deleted file mode 100644 index 1286b3be..00000000 --- a/SabreTools.Metadata/Converters.cs +++ /dev/null @@ -1,43 +0,0 @@ -namespace SabreTools.Metadata -{ - public static class Converters - { - #region String to Enum - - /// - /// Get bool? value from input string - /// - /// String to get value from - /// bool? corresponding to the string - public static bool? AsYesNo(this string? yesno) - { - return yesno?.ToLowerInvariant() switch - { - "yes" or "true" => true, - "no" or "false" => false, - _ => null, - }; - } - - #endregion - - #region Enum to String - - /// - /// Get string value from input bool? - /// - /// bool? to get value from - /// String corresponding to the bool? - public static string? FromYesNo(this bool? yesno) - { - return yesno switch - { - true => "yes", - false => "no", - _ => null, - }; - } - - #endregion - } -} diff --git a/SabreTools.Metadata/DictionaryBaseExtensions.cs b/SabreTools.Metadata/DictionaryBaseExtensions.cs index 003c1877..0fe77c02 100644 --- a/SabreTools.Metadata/DictionaryBaseExtensions.cs +++ b/SabreTools.Metadata/DictionaryBaseExtensions.cs @@ -8,45 +8,6 @@ namespace SabreTools.Metadata { public static class DictionaryBaseExtensions { - #region Cloning - - /// - /// Deep clone a DictionaryBase object - /// - public static DictionaryBase? Clone(this DictionaryBase self) - { - // If construction failed, we can't do anything - if (Activator.CreateInstance(self.GetType()) is not DictionaryBase clone) - return null; - - // Loop through and clone per type - foreach (string key in self.Keys) - { - object? value = self[key]; - clone[key] = value switch - { - // Primative types - bool or long or double or string => value, - - // DictionaryBase types - DictionaryBase db => db.Clone(), - - // Enumerable types - byte[] bytArr => bytArr.Clone(), - string[] strArr => strArr.Clone(), - DictionaryBase[] dbArr => Array.ConvertAll(dbArr, Clone), - ICloneable[] clArr => Array.ConvertAll(clArr, cl => cl.Clone()), - - // Everything else just copies - _ => value, - }; - } - - return clone; - } - - #endregion - #region Equality Checking ///