Create and use NoFilter attribute

This commit is contained in:
Matt Nadareski
2023-08-11 11:29:25 -04:00
parent 58ce48235c
commit f5ceaa9edc
19 changed files with 76 additions and 45 deletions

View File

@@ -1,6 +1,7 @@
using System;
using System.Linq;
using System.Reflection;
using SabreTools.Models;
using SabreTools.Models.Internal;
namespace SabreTools.Filter
@@ -55,16 +56,8 @@ namespace SabreTools.Filter
if (constantMatch == null)
return (null, null);
// Filter out fields that can't be matched on
return constantMatch switch
{
Header.CanOpenKey => (null, null),
Header.ImagesKey => (null, null),
Header.InfosKey => (null, null),
Header.NewDatKey => (null, null),
Header.SearchKey => (null, null),
_ => (MetadataFile.HeaderKey, constantMatch),
};
// Return the sanitized ID
return (MetadataFile.HeaderKey, constantMatch);
}
/// <summary>
@@ -82,46 +75,13 @@ namespace SabreTools.Filter
if (constantMatch == null)
return (null, null);
// Filter out fields that can't be matched on
return constantMatch switch
{
Machine.AdjusterKey => (null, null),
Machine.ArchiveKey => (null, null),
Machine.BiosSetKey => (null, null),
Machine.ChipKey => (null, null),
Machine.ConfigurationKey => (null, null),
Machine.ControlKey => (null, null),
Machine.DeviceKey => (null, null),
Machine.DeviceRefKey => (null, null),
Machine.DipSwitchKey => (null, null),
Machine.DiskKey => (null, null),
Machine.DisplayKey => (null, null),
Machine.DriverKey => (null, null),
Machine.DumpKey => (null, null),
Machine.FeatureKey => (null, null),
Machine.InfoKey => (null, null),
Machine.InputKey => (null, null),
Machine.MediaKey => (null, null),
Machine.PartKey => (null, null),
Machine.PortKey => (null, null),
Machine.RamOptionKey => (null, null),
Machine.ReleaseKey => (null, null),
Machine.RomKey => (null, null),
Machine.SampleKey => (null, null),
Machine.SharedFeatKey => (null, null),
Machine.SlotKey => (null, null),
Machine.SoftwareListKey => (null, null),
Machine.SoundKey => (null, null),
Machine.TruripKey => (null, null),
Machine.VideoKey => (null, null),
_ => (MetadataFile.MachineKey, constantMatch),
};
// Return the sanitized ID
return (MetadataFile.MachineKey, constantMatch);
}
/// <summary>
/// Get constant values for the given type, if possible
/// </summary>
/// <remarks>TODO: Create a NoFilter attribute for non-mappable filter IDs</remarks>
private static string[]? GetConstants(Type? type)
{
if (type == null)
@@ -133,6 +93,7 @@ namespace SabreTools.Filter
return fields
.Where(f => f.IsLiteral && !f.IsInitOnly)
.Where(f => f.CustomAttributes.Any(a => a.AttributeType == typeof(NoFilterAttribute)))
.Select(f => f.GetRawConstantValue() as string)
.Where(v => v != null)
.ToArray()!;

View File

@@ -9,6 +9,7 @@ namespace SabreTools.Models.Internal
#region Keys
// <remarks>Condition</remarks>
[NoFilter]
public const string ConditionKey = "condition";
/// <remarks>bool</remarks>

View File

@@ -9,6 +9,7 @@ namespace SabreTools.Models.Internal
#region Keys
/// <remarks>Condition</remarks>
[NoFilter]
public const string ConditionKey = "condition";
/// <remarks>(yes|no) "no"</remarks>

View File

@@ -9,12 +9,15 @@ namespace SabreTools.Models.Internal
#region Keys
/// <remarks>Condition</remarks>
[NoFilter]
public const string ConditionKey = "condition";
/// <remarks>ConfLocation[]</remarks>
[NoFilter]
public const string ConfLocationKey = "conflocation";
/// <remarks>ConfSetting[]</remarks>
[NoFilter]
public const string ConfSettingKey = "confsetting";
/// <remarks>string</remarks>

View File

@@ -15,6 +15,7 @@ namespace SabreTools.Models.Internal
public const string NameKey = "name";
/// <remarks>Rom[]</remarks>
[NoFilter]
public const string RomKey = "rom";
/// <remarks>long</remarks>

View File

@@ -9,12 +9,14 @@ namespace SabreTools.Models.Internal
#region Keys
/// <remarks>Extension[]</remarks>
[NoFilter]
public const string ExtensionKey = "extension";
/// <remarks>string</remarks>
public const string FixedImageKey = "fixed_image";
/// <remarks>Instance</remarks>
[NoFilter]
public const string InstanceKey = "instance";
/// <remarks>string</remarks>

View File

@@ -9,15 +9,18 @@ namespace SabreTools.Models.Internal
#region Keys
/// <remarks>Condition</remarks>
[NoFilter]
public const string ConditionKey = "condition";
/// <remarks>(yes|no) "no"</remarks>
public const string DefaultKey = "default";
/// <remarks>DipLocation[]</remarks>
[NoFilter]
public const string DipLocationKey = "diplocation";
/// <remarks>DipValue[]</remarks>
[NoFilter]
public const string DipValueKey = "dipvalue";
/// <remarks>string[]</remarks>

View File

@@ -9,6 +9,7 @@ namespace SabreTools.Models.Internal
#region Keys
/// <remarks>Condition</remarks>
[NoFilter]
public const string ConditionKey = "condition";
/// <remarks>(yes|no) "no"</remarks>

View File

@@ -9,6 +9,7 @@ namespace SabreTools.Models.Internal
#region Keys
/// <remarks>Disk[]</remarks>
[NoFilter]
public const string DiskKey = "disk";
/// <remarks>string</remarks>

View File

@@ -9,15 +9,19 @@ namespace SabreTools.Models.Internal
#region Keys
/// <remarks>Rom</remarks>
[NoFilter]
public const string MegaRomKey = "megarom";
/// <remarks>Original</remarks>
[NoFilter]
public const string OriginalKey = "original";
/// <remarks>Rom</remarks>
[NoFilter]
public const string RomKey = "rom";
/// <remarks>Rom</remarks>
[NoFilter]
public const string SCCPlusCartKey = "sccpluscart";
#endregion

View File

@@ -18,6 +18,7 @@ namespace SabreTools.Models.Internal
/// TODO: This needs an internal model OR mapping to fields
/// <remarks>CanOpen</remarks>
[NoFilter]
public const string CanOpenKey = "canOpen";
/// <remarks>string</remarks>
@@ -67,6 +68,7 @@ namespace SabreTools.Models.Internal
/// TODO: This needs an internal model OR mapping to fields
/// <remarks>Search</remarks>
[NoFilter]
public const string ImagesKey = "images";
/// <remarks>string</remarks>
@@ -74,6 +76,7 @@ namespace SabreTools.Models.Internal
/// TODO: This needs an internal model OR mapping to fields
/// <remarks>Infos</remarks>
[NoFilter]
public const string InfosKey = "infos";
/// <remarks>(yes|no) "no"</remarks>
@@ -93,6 +96,7 @@ namespace SabreTools.Models.Internal
/// TODO: This needs an internal model OR mapping to fields
/// <remarks>NewDat</remarks>
[NoFilter]
public const string NewDatKey = "newDat";
/// <remarks>string</remarks>
@@ -127,6 +131,7 @@ namespace SabreTools.Models.Internal
/// TODO: This needs an internal model OR mapping to fields
/// <remarks>Search</remarks>
[NoFilter]
public const string SearchKey = "search";
/// <remarks>string</remarks>

View File

@@ -8,12 +8,15 @@ namespace SabreTools.Models.Internal
#region Keys
/// <remarks>Adjuster[]</remarks>
[NoFilter]
public const string AdjusterKey = "adjuster";
/// <remarks>Archive[]</remarks>
[NoFilter]
public const string ArchiveKey = "archive";
/// <remarks>BiosSet[]</remarks>
[NoFilter]
public const string BiosSetKey = "biosset";
/// <remarks>string</remarks>
@@ -26,6 +29,7 @@ namespace SabreTools.Models.Internal
public const string CategoryKey = "category";
/// <remarks>Chip[]</remarks>
[NoFilter]
public const string ChipKey = "chip";
/// <remarks>string</remarks>
@@ -41,6 +45,7 @@ namespace SabreTools.Models.Internal
public const string CompanyKey = "company";
/// <remarks>Configuration[]</remarks>
[NoFilter]
public const string ConfigurationKey = "configuration";
/// <remarks>string</remarks>
@@ -53,33 +58,40 @@ namespace SabreTools.Models.Internal
public const string DescriptionKey = "description";
/// <remarks>Device[]</remarks>
[NoFilter]
public const string DeviceKey = "device";
/// <remarks>DeviceRef[]</remarks>
[NoFilter]
public const string DeviceRefKey = "device_ref";
/// <remarks>DipSwitch[]</remarks>
[NoFilter]
public const string DipSwitchKey = "dipswitch";
/// <remarks>string</remarks>
public const string DirNameKey = "dirName";
/// <remarks>Disk[]</remarks>
[NoFilter]
public const string DiskKey = "disk";
/// <remarks>string</remarks>
public const string DisplayCountKey = "displaycount";
/// <remarks>Display[]</remarks>
[NoFilter]
public const string DisplayKey = "display";
/// <remarks>string</remarks>
public const string DisplayTypeKey = "displaytype";
/// <remarks>Driver</remarks>
[NoFilter]
public const string DriverKey = "driver";
/// <remarks>Dump[]</remarks>
[NoFilter]
public const string DumpKey = "dump";
/// <remarks>string</remarks>
@@ -95,6 +107,7 @@ namespace SabreTools.Models.Internal
public const string FavoriteKey = "favorite";
/// <remarks>Feature[]</remarks>
[NoFilter]
public const string FeatureKey = "feature";
/// <remarks>string</remarks>
@@ -116,9 +129,11 @@ namespace SabreTools.Models.Internal
public const string ImageNumberKey = "imageNumber";
/// <remarks>Info[]</remarks>
[NoFilter]
public const string InfoKey = "info";
/// <remarks>Input</remarks>
[NoFilter]
public const string InputKey = "input";
/// <remarks>(yes|no) "no"</remarks>
@@ -140,6 +155,7 @@ namespace SabreTools.Models.Internal
public const string ManufacturerKey = "manufacturer";
/// <remarks>Media[]</remarks>
[NoFilter]
public const string MediaKey = "media";
/// <remarks>string</remarks>
@@ -149,6 +165,7 @@ namespace SabreTools.Models.Internal
public const string NotesKey = "notes";
/// <remarks>Part[]</remarks>
[NoFilter]
public const string PartKey = "part";
/// <remarks>string</remarks>
@@ -161,24 +178,28 @@ namespace SabreTools.Models.Internal
public const string PlayersKey = "players";
/// <remarks>Port[]</remarks>
[NoFilter]
public const string PortKey = "port";
/// <remarks>string</remarks>
public const string PublisherKey = "publisher";
/// <remarks>RamOption[]</remarks>
[NoFilter]
public const string RamOptionKey = "ramoption";
/// <remarks>string</remarks>
public const string RebuildToKey = "rebuildto";
/// <remarks>Release[]</remarks>
[NoFilter]
public const string ReleaseKey = "release";
/// <remarks>string</remarks>
public const string ReleaseNumberKey = "releaseNumber";
/// <remarks>Rom[]</remarks>
[NoFilter]
public const string RomKey = "rom";
/// <remarks>string</remarks>
@@ -191,6 +212,7 @@ namespace SabreTools.Models.Internal
public const string RunnableKey = "runnable";
/// <remarks>Sample[]</remarks>
[NoFilter]
public const string SampleKey = "sample";
/// <remarks>string</remarks>
@@ -200,15 +222,19 @@ namespace SabreTools.Models.Internal
public const string SaveTypeKey = "saveType";
/// <remarks>SharedFeat[]</remarks>
[NoFilter]
public const string SharedFeatKey = "sharedfeat";
/// <remarks>Slot[]</remarks>
[NoFilter]
public const string SlotKey = "slot";
/// <remarks>SoftwareList[]</remarks>
[NoFilter]
public const string SoftwareListKey = "softwarelist";
/// <remarks>Sound</remarks>
[NoFilter]
public const string SoundKey = "sound";
/// <remarks>string</remarks>
@@ -231,9 +257,11 @@ namespace SabreTools.Models.Internal
/// TODO: This needs an internal model OR mapping to fields
/// <remarks>Trurip</remarks>
[NoFilter]
public const string TruripKey = "trurip";
/// <remarks>Video[]</remarks>
[NoFilter]
public const string VideoKey = "video";
/// <remarks>string</remarks>

View File

@@ -8,9 +8,11 @@ namespace SabreTools.Models.Internal
#region Keys
/// <remarks>Machine[]</remarks>
[NoFilter]
public const string MachineKey = "machine";
/// <remarks>Header</remarks>
[NoFilter]
public const string HeaderKey = "header";
#endregion

View File

@@ -9,15 +9,19 @@ namespace SabreTools.Models.Internal
#region Keys
/// <remarks>DataArea[]</remarks>
[NoFilter]
public const string DataAreaKey = "dataarea";
/// <remarks>DiskArea[]</remarks>
[NoFilter]
public const string DiskAreaKey = "diskarea";
/// <remarks>DipSwitch[]</remarks>
[NoFilter]
public const string DipSwitchKey = "dipswitch";
/// <remarks>Feature[]</remarks>
[NoFilter]
public const string FeatureKey = "feature";
/// <remarks>string</remarks>

View File

@@ -9,6 +9,7 @@ namespace SabreTools.Models.Internal
#region Keys
/// <remarks>Analog[]</remarks>
[NoFilter]
public const string AnalogKey = "analog";
/// <remarks>string</remarks>

View File

@@ -12,6 +12,7 @@ namespace SabreTools.Models.Internal
public const string NameKey = "name";
/// <remarks>SlotOption[]</remarks>
[NoFilter]
public const string SlotOptionKey = "slotoption";
#endregion

View File

@@ -15,6 +15,7 @@ namespace SabreTools.Models.Internal
public const string DescriptionKey = "description";
/// <remarks>Info[]</remarks>
[NoFilter]
public const string InfoKey = "info";
/// <remarks>string</remarks>
@@ -24,12 +25,14 @@ namespace SabreTools.Models.Internal
public const string NotesKey = "notes";
/// <remarks>Part[]</remarks>
[NoFilter]
public const string PartKey = "part";
/// <remarks>string</remarks>
public const string PublisherKey = "publisher";
/// <remarks>SharedFeat[]</remarks>
[NoFilter]
public const string SharedFeatKey = "sharedfeat";
/// <remarks>(yes|partial|no) "yes"</remarks>

View File

@@ -21,6 +21,7 @@ namespace SabreTools.Models.Internal
public const string NotesKey = "notes";
/// <remarks>Software[]</remarks>
[NoFilter]
public const string SoftwareKey = "software";
/// <remarks>(original|compatible)</remarks>

View File

@@ -0,0 +1,8 @@
namespace SabreTools.Models
{
/// <summary>
/// Marks a property as required on write
/// </summary>
[System.AttributeUsage(System.AttributeTargets.Field)]
public class NoFilterAttribute : System.Attribute { }
}