diff --git a/SabreTools.Models/AttractMode/MetadataFile.cs b/SabreTools.Models/AttractMode/MetadataFile.cs
index ec72fac2..b1b78a0d 100644
--- a/SabreTools.Models/AttractMode/MetadataFile.cs
+++ b/SabreTools.Models/AttractMode/MetadataFile.cs
@@ -5,7 +5,8 @@ namespace SabreTools.Models.AttractMode
///
public class MetadataFile
{
- public string[] Header { get; set; }
+ [Required]
+ public string[]? Header { get; set; }
public Row[]? Row { get; set; }
}
diff --git a/SabreTools.Models/AttractMode/Row.cs b/SabreTools.Models/AttractMode/Row.cs
index bf8d300e..17fc57f3 100644
--- a/SabreTools.Models/AttractMode/Row.cs
+++ b/SabreTools.Models/AttractMode/Row.cs
@@ -3,7 +3,8 @@ namespace SabreTools.Models.AttractMode
public class Row
{
/// Also called Romname
- public string Name { get; set; }
+ [Required]
+ public string? Name { get; set; }
public string? Title { get; set; }
diff --git a/SabreTools.Models/ClrMamePro/Archive.cs b/SabreTools.Models/ClrMamePro/Archive.cs
index 498c7183..2cd03795 100644
--- a/SabreTools.Models/ClrMamePro/Archive.cs
+++ b/SabreTools.Models/ClrMamePro/Archive.cs
@@ -4,7 +4,8 @@ namespace SabreTools.Models.ClrMamePro
public class Archive
{
/// name
- public string Name { get; set; }
+ [Required]
+ public string? Name { get; set; }
#region DO NOT USE IN PRODUCTION
diff --git a/SabreTools.Models/ClrMamePro/BiosSet.cs b/SabreTools.Models/ClrMamePro/BiosSet.cs
index fe1dfa86..54326691 100644
--- a/SabreTools.Models/ClrMamePro/BiosSet.cs
+++ b/SabreTools.Models/ClrMamePro/BiosSet.cs
@@ -4,10 +4,12 @@ namespace SabreTools.Models.ClrMamePro
public class BiosSet
{
/// name
- public string Name { get; set; }
+ [Required]
+ public string? Name { get; set; }
/// description
- public string Description { get; set; }
+ [Required]
+ public string? Description { get; set; }
/// default
public string? Default { get; set; }
diff --git a/SabreTools.Models/ClrMamePro/Chip.cs b/SabreTools.Models/ClrMamePro/Chip.cs
index f7d3a299..d542d568 100644
--- a/SabreTools.Models/ClrMamePro/Chip.cs
+++ b/SabreTools.Models/ClrMamePro/Chip.cs
@@ -4,10 +4,12 @@ namespace SabreTools.Models.ClrMamePro
public class Chip
{
/// type, (cpu|audio)
- public string Type { get; set; }
+ [Required]
+ public string? Type { get; set; }
/// name
- public string Name { get; set; }
+ [Required]
+ public string? Name { get; set; }
/// flags
public string? Flags { get; set; }
diff --git a/SabreTools.Models/ClrMamePro/DipSwitch.cs b/SabreTools.Models/ClrMamePro/DipSwitch.cs
index 46c5f09e..38708414 100644
--- a/SabreTools.Models/ClrMamePro/DipSwitch.cs
+++ b/SabreTools.Models/ClrMamePro/DipSwitch.cs
@@ -4,7 +4,8 @@ namespace SabreTools.Models.ClrMamePro
public class DipSwitch
{
/// name
- public string Name { get; set; }
+ [Required]
+ public string? Name { get; set; }
/// entry
public string[]? Entry { get; set; }
diff --git a/SabreTools.Models/ClrMamePro/Disk.cs b/SabreTools.Models/ClrMamePro/Disk.cs
index 23407c37..0a84fa3f 100644
--- a/SabreTools.Models/ClrMamePro/Disk.cs
+++ b/SabreTools.Models/ClrMamePro/Disk.cs
@@ -4,7 +4,8 @@ namespace SabreTools.Models.ClrMamePro
public class Disk
{
/// name
- public string Name { get; set; }
+ [Required]
+ public string? Name { get; set; }
/// md5
public string? MD5 { get; set; }
diff --git a/SabreTools.Models/ClrMamePro/Driver.cs b/SabreTools.Models/ClrMamePro/Driver.cs
index f84b3a78..f1656e57 100644
--- a/SabreTools.Models/ClrMamePro/Driver.cs
+++ b/SabreTools.Models/ClrMamePro/Driver.cs
@@ -4,7 +4,8 @@ namespace SabreTools.Models.ClrMamePro
public class Driver
{
/// status, (good|imperfect|preliminary)
- public string Status { get; set; }
+ [Required]
+ public string? Status { get; set; }
/// color, (good|imperfect|preliminary)
public string? Color { get; set; }
diff --git a/SabreTools.Models/ClrMamePro/GameBase.cs b/SabreTools.Models/ClrMamePro/GameBase.cs
index 1efbd9fb..ca234095 100644
--- a/SabreTools.Models/ClrMamePro/GameBase.cs
+++ b/SabreTools.Models/ClrMamePro/GameBase.cs
@@ -6,7 +6,8 @@ namespace SabreTools.Models.ClrMamePro
public abstract class GameBase
{
/// name
- public string Name { get; set; }
+ [Required]
+ public string? Name { get; set; }
/// description
public string? Description { get; set; }
diff --git a/SabreTools.Models/ClrMamePro/Input.cs b/SabreTools.Models/ClrMamePro/Input.cs
index 76c416bc..06da37b2 100644
--- a/SabreTools.Models/ClrMamePro/Input.cs
+++ b/SabreTools.Models/ClrMamePro/Input.cs
@@ -3,14 +3,16 @@ namespace SabreTools.Models.ClrMamePro
/// input
public class Input
{
- /// players, Numeric?/remarks>
- public string Players { get; set; }
+ /// players, Numeric/remarks>
+ [Required]
+ public string? Players { get; set; }
/// control
public string? Control { get; set; }
/// buttons, Numeric
- public string Buttons { get; set; }
+ [Required]
+ public string? Buttons { get; set; }
/// coins, Numeric
public string? Coins { get; set; }
diff --git a/SabreTools.Models/ClrMamePro/Media.cs b/SabreTools.Models/ClrMamePro/Media.cs
index 9a8d66d4..25f678aa 100644
--- a/SabreTools.Models/ClrMamePro/Media.cs
+++ b/SabreTools.Models/ClrMamePro/Media.cs
@@ -4,7 +4,8 @@ namespace SabreTools.Models.ClrMamePro
public class Media
{
/// name
- public string Name { get; set; }
+ [Required]
+ public string? Name { get; set; }
/// md5
public string? MD5 { get; set; }
diff --git a/SabreTools.Models/ClrMamePro/Release.cs b/SabreTools.Models/ClrMamePro/Release.cs
index 69f73c20..1da26ca3 100644
--- a/SabreTools.Models/ClrMamePro/Release.cs
+++ b/SabreTools.Models/ClrMamePro/Release.cs
@@ -4,10 +4,12 @@ namespace SabreTools.Models.ClrMamePro
public class Release
{
/// name
- public string Name { get; set; }
+ [Required]
+ public string? Name { get; set; }
/// region
- public string Region { get; set; }
+ [Required]
+ public string? Region { get; set; }
/// language
public string? Language { get; set; }
diff --git a/SabreTools.Models/ClrMamePro/Rom.cs b/SabreTools.Models/ClrMamePro/Rom.cs
index 250da8c2..a98677ed 100644
--- a/SabreTools.Models/ClrMamePro/Rom.cs
+++ b/SabreTools.Models/ClrMamePro/Rom.cs
@@ -4,10 +4,12 @@ namespace SabreTools.Models.ClrMamePro
public class Rom
{
/// name
- public string Name { get; set; }
+ [Required]
+ public string? Name { get; set; }
/// size, Numeric
- public string Size { get; set; }
+ [Required]
+ public string? Size { get; set; }
/// crc
public string? CRC { get; set; }
diff --git a/SabreTools.Models/ClrMamePro/Sample.cs b/SabreTools.Models/ClrMamePro/Sample.cs
index bfada9d7..ab0b11c1 100644
--- a/SabreTools.Models/ClrMamePro/Sample.cs
+++ b/SabreTools.Models/ClrMamePro/Sample.cs
@@ -4,7 +4,8 @@ namespace SabreTools.Models.ClrMamePro
public class Sample
{
/// name
- public string Name { get; set; }
+ [Required]
+ public string? Name { get; set; }
#region DO NOT USE IN PRODUCTION
diff --git a/SabreTools.Models/ClrMamePro/Sound.cs b/SabreTools.Models/ClrMamePro/Sound.cs
index 3c37f621..bfddee8b 100644
--- a/SabreTools.Models/ClrMamePro/Sound.cs
+++ b/SabreTools.Models/ClrMamePro/Sound.cs
@@ -4,7 +4,8 @@ namespace SabreTools.Models.ClrMamePro
public class Sound
{
/// channels, Numeric?
- public string Channels { get; set; }
+ [Required]
+ public string? Channels { get; set; }
#region DO NOT USE IN PRODUCTION
diff --git a/SabreTools.Models/ClrMamePro/Video.cs b/SabreTools.Models/ClrMamePro/Video.cs
index d946bade..c7448aa8 100644
--- a/SabreTools.Models/ClrMamePro/Video.cs
+++ b/SabreTools.Models/ClrMamePro/Video.cs
@@ -4,10 +4,12 @@ namespace SabreTools.Models.ClrMamePro
public class Video
{
/// screen, (raster|vector)
- public string Screen { get; set; }
+ [Required]
+ public string? Screen { get; set; }
/// orientation, (vertical|horizontal)
- public string Orientation { get; set; }
+ [Required]
+ public string? Orientation { get; set; }
/// x, Numeric?
public string? X { get; set; }
diff --git a/SabreTools.Models/DosCenter/File.cs b/SabreTools.Models/DosCenter/File.cs
index 1ae126c1..eb663f45 100644
--- a/SabreTools.Models/DosCenter/File.cs
+++ b/SabreTools.Models/DosCenter/File.cs
@@ -4,13 +4,16 @@ namespace SabreTools.Models.DosCenter
public class File
{
/// name, attribute
- public string Name { get; set; }
+ [Required]
+ public string? Name { get; set; }
/// size, attribute, numeric
- public string Size { get; set; }
+ [Required]
+ public string? Size { get; set; }
/// crc, attribute
- public string CRC { get; set; }
+ [Required]
+ public string? CRC { get; set; }
/// date, attribute
public string? Date { get; set; }
diff --git a/SabreTools.Models/DosCenter/Game.cs b/SabreTools.Models/DosCenter/Game.cs
index 3f5b159a..8413155c 100644
--- a/SabreTools.Models/DosCenter/Game.cs
+++ b/SabreTools.Models/DosCenter/Game.cs
@@ -4,6 +4,7 @@ namespace SabreTools.Models.DosCenter
public class Game
{
/// name
+ [Required]
public string? Name { get; set; }
/// file
diff --git a/SabreTools.Models/EverdriveSMDB/Row.cs b/SabreTools.Models/EverdriveSMDB/Row.cs
index fd89b184..648dbe4d 100644
--- a/SabreTools.Models/EverdriveSMDB/Row.cs
+++ b/SabreTools.Models/EverdriveSMDB/Row.cs
@@ -5,15 +5,20 @@ namespace SabreTools.Models.EverdriveSMDB
///
public class Row
{
- public string SHA256 { get; set; }
+ [Required]
+ public string? SHA256 { get; set; }
- public string Name { get; set; }
+ [Required]
+ public string? Name { get; set; }
- public string SHA1 { get; set; }
+ [Required]
+ public string? SHA1 { get; set; }
- public string MD5 { get; set; }
+ [Required]
+ public string? MD5 { get; set; }
- public string CRC32 { get; set; }
+ [Required]
+ public string? CRC32 { get; set; }
public string? Size { get; set; }
diff --git a/SabreTools.Models/Hashfile/MD5.cs b/SabreTools.Models/Hashfile/MD5.cs
index 45a8fa83..1156d18a 100644
--- a/SabreTools.Models/Hashfile/MD5.cs
+++ b/SabreTools.Models/Hashfile/MD5.cs
@@ -5,8 +5,10 @@ namespace SabreTools.Models.Hashfile
///
public class MD5
{
- public string Hash { get; set; }
+ [Required]
+ public string? Hash { get; set; }
- public string File { get; set; }
+ [Required]
+ public string? File { get; set; }
}
}
\ No newline at end of file
diff --git a/SabreTools.Models/Hashfile/SFV.cs b/SabreTools.Models/Hashfile/SFV.cs
index 50ec621e..8d4be7f2 100644
--- a/SabreTools.Models/Hashfile/SFV.cs
+++ b/SabreTools.Models/Hashfile/SFV.cs
@@ -5,8 +5,10 @@ namespace SabreTools.Models.Hashfile
///
public class SFV
{
- public string File { get; set; }
+ [Required]
+ public string? File { get; set; }
- public string Hash { get; set; }
+ [Required]
+ public string? Hash { get; set; }
}
}
\ No newline at end of file
diff --git a/SabreTools.Models/Hashfile/SHA1.cs b/SabreTools.Models/Hashfile/SHA1.cs
index df7008a7..153afb3e 100644
--- a/SabreTools.Models/Hashfile/SHA1.cs
+++ b/SabreTools.Models/Hashfile/SHA1.cs
@@ -5,8 +5,10 @@ namespace SabreTools.Models.Hashfile
///
public class SHA1
{
- public string Hash { get; set; }
+ [Required]
+ public string? Hash { get; set; }
- public string File { get; set; }
+ [Required]
+ public string? File { get; set; }
}
}
\ No newline at end of file
diff --git a/SabreTools.Models/Hashfile/SHA256.cs b/SabreTools.Models/Hashfile/SHA256.cs
index 1761443b..9b2c6d2a 100644
--- a/SabreTools.Models/Hashfile/SHA256.cs
+++ b/SabreTools.Models/Hashfile/SHA256.cs
@@ -5,8 +5,10 @@ namespace SabreTools.Models.Hashfile
///
public class SHA256
{
- public string Hash { get; set; }
+ [Required]
+ public string? Hash { get; set; }
- public string File { get; set; }
+ [Required]
+ public string? File { get; set; }
}
}
\ No newline at end of file
diff --git a/SabreTools.Models/Hashfile/SHA384.cs b/SabreTools.Models/Hashfile/SHA384.cs
index ab393ecf..916aa710 100644
--- a/SabreTools.Models/Hashfile/SHA384.cs
+++ b/SabreTools.Models/Hashfile/SHA384.cs
@@ -5,8 +5,10 @@ namespace SabreTools.Models.Hashfile
///
public class SHA384
{
- public string Hash { get; set; }
+ [Required]
+ public string? Hash { get; set; }
- public string File { get; set; }
+ [Required]
+ public string? File { get; set; }
}
}
\ No newline at end of file
diff --git a/SabreTools.Models/Hashfile/SHA512.cs b/SabreTools.Models/Hashfile/SHA512.cs
index bcd2055c..dec6abb7 100644
--- a/SabreTools.Models/Hashfile/SHA512.cs
+++ b/SabreTools.Models/Hashfile/SHA512.cs
@@ -5,8 +5,10 @@ namespace SabreTools.Models.Hashfile
///
public class SHA512
{
- public string Hash { get; set; }
+ [Required]
+ public string? Hash { get; set; }
- public string File { get; set; }
+ [Required]
+ public string? File { get; set; }
}
}
\ No newline at end of file
diff --git a/SabreTools.Models/Hashfile/SpamSum.cs b/SabreTools.Models/Hashfile/SpamSum.cs
index c3a9363e..82bb61ea 100644
--- a/SabreTools.Models/Hashfile/SpamSum.cs
+++ b/SabreTools.Models/Hashfile/SpamSum.cs
@@ -5,8 +5,10 @@ namespace SabreTools.Models.Hashfile
///
public class SpamSum
{
- public string Hash { get; set; }
+ [Required]
+ public string? Hash { get; set; }
- public string File { get; set; }
+ [Required]
+ public string? File { get; set; }
}
}
\ No newline at end of file
diff --git a/SabreTools.Models/Listrom/Row.cs b/SabreTools.Models/Listrom/Row.cs
index f6a62f1a..4f3dce97 100644
--- a/SabreTools.Models/Listrom/Row.cs
+++ b/SabreTools.Models/Listrom/Row.cs
@@ -14,7 +14,8 @@ namespace SabreTools.Models.Listrom
///
public class Row
{
- public string Name { get; set; }
+ [Required]
+ public string? Name { get; set; }
public string? Size { get; set; }
diff --git a/SabreTools.Models/Listxml/Adjuster.cs b/SabreTools.Models/Listxml/Adjuster.cs
index 37970024..f5d6de1a 100644
--- a/SabreTools.Models/Listxml/Adjuster.cs
+++ b/SabreTools.Models/Listxml/Adjuster.cs
@@ -6,8 +6,9 @@ namespace SabreTools.Models.Listxml
[XmlRoot("adjuster")]
public class Adjuster
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
/// (yes|no) "no"
[XmlAttribute("default")]
diff --git a/SabreTools.Models/Listxml/Analog.cs b/SabreTools.Models/Listxml/Analog.cs
index 8f4a1baf..1effbaf5 100644
--- a/SabreTools.Models/Listxml/Analog.cs
+++ b/SabreTools.Models/Listxml/Analog.cs
@@ -6,8 +6,9 @@ namespace SabreTools.Models.Listxml
[XmlRoot("analog")]
public class Analog
{
+ [Required]
[XmlAttribute("mask")]
- public string Mask { get; set; }
+ public string? Mask { get; set; }
#region DO NOT USE IN PRODUCTION
diff --git a/SabreTools.Models/Listxml/BiosSet.cs b/SabreTools.Models/Listxml/BiosSet.cs
index 2399b4d3..51dc9e3d 100644
--- a/SabreTools.Models/Listxml/BiosSet.cs
+++ b/SabreTools.Models/Listxml/BiosSet.cs
@@ -6,11 +6,13 @@ namespace SabreTools.Models.Listxml
[XmlRoot("biosset")]
public class BiosSet
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
+ [Required]
[XmlAttribute("description")]
- public string Description { get; set; }
+ public string? Description { get; set; }
/// (yes|no) "no"
[XmlAttribute("default")]
diff --git a/SabreTools.Models/Listxml/Chip.cs b/SabreTools.Models/Listxml/Chip.cs
index 56cf0ee6..dc722b83 100644
--- a/SabreTools.Models/Listxml/Chip.cs
+++ b/SabreTools.Models/Listxml/Chip.cs
@@ -6,15 +6,17 @@ namespace SabreTools.Models.Listxml
[XmlRoot("chip")]
public class Chip
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
[XmlAttribute("tag")]
public string? Tag { get; set; }
/// (cpu|audio)
+ [Required]
[XmlAttribute("type")]
- public string Type { get; set; }
+ public string? Type { get; set; }
/// Only present in older versions
[XmlAttribute("soundonly")]
diff --git a/SabreTools.Models/Listxml/Condition.cs b/SabreTools.Models/Listxml/Condition.cs
index 8746d61b..ddf02c66 100644
--- a/SabreTools.Models/Listxml/Condition.cs
+++ b/SabreTools.Models/Listxml/Condition.cs
@@ -6,18 +6,22 @@ namespace SabreTools.Models.Listxml
[XmlRoot("condition")]
public class Condition
{
+ [Required]
[XmlAttribute("tag")]
- public string Tag { get; set; }
+ public string? Tag { get; set; }
+ [Required]
[XmlAttribute("mask")]
- public string Mask { get; set; }
+ public string? Mask { get; set; }
/// (eq|ne|gt|le|lt|ge)
+ [Required]
[XmlAttribute("relation")]
- public string Relation { get; set; }
+ public string? Relation { get; set; }
+ [Required]
[XmlAttribute("value")]
- public string Value { get; set; }
+ public string? Value { get; set; }
#region DO NOT USE IN PRODUCTION
diff --git a/SabreTools.Models/Listxml/ConfLocation.cs b/SabreTools.Models/Listxml/ConfLocation.cs
index 087504b5..9199c715 100644
--- a/SabreTools.Models/Listxml/ConfLocation.cs
+++ b/SabreTools.Models/Listxml/ConfLocation.cs
@@ -6,12 +6,14 @@ namespace SabreTools.Models.Listxml
[XmlRoot("conflocation")]
public class ConfLocation
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
/// Numeric?
+ [Required]
[XmlAttribute("number")]
- public string Number { get; set; }
+ public string? Number { get; set; }
/// (yes|no) "no"
[XmlAttribute("inverted")]
diff --git a/SabreTools.Models/Listxml/ConfSetting.cs b/SabreTools.Models/Listxml/ConfSetting.cs
index 7a58348b..2d3d972d 100644
--- a/SabreTools.Models/Listxml/ConfSetting.cs
+++ b/SabreTools.Models/Listxml/ConfSetting.cs
@@ -6,11 +6,13 @@ namespace SabreTools.Models.Listxml
[XmlRoot("confsetting")]
public class ConfSetting
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
+ [Required]
[XmlAttribute("value")]
- public string Value { get; set; }
+ public string? Value { get; set; }
/// (yes|no) "no"
[XmlAttribute("default")]
diff --git a/SabreTools.Models/Listxml/Configuration.cs b/SabreTools.Models/Listxml/Configuration.cs
index faeb7b1e..1871ad70 100644
--- a/SabreTools.Models/Listxml/Configuration.cs
+++ b/SabreTools.Models/Listxml/Configuration.cs
@@ -6,11 +6,13 @@ namespace SabreTools.Models.Listxml
[XmlRoot("configuration")]
public class Configuration
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
+ [Required]
[XmlAttribute("tag")]
- public string Tag { get; set; }
+ public string? Tag { get; set; }
[XmlAttribute("mask")]
public string? Mask { get; set; }
diff --git a/SabreTools.Models/Listxml/Control.cs b/SabreTools.Models/Listxml/Control.cs
index 86032b3a..c517de7c 100644
--- a/SabreTools.Models/Listxml/Control.cs
+++ b/SabreTools.Models/Listxml/Control.cs
@@ -7,8 +7,9 @@ namespace SabreTools.Models.Listxml
public class Control
{
/// (joy|stick|paddle|pedal|lightgun|positional|dial|trackball|mouse|only_buttons|keypad|keyboard|mahjong|hanafuda|gambling)
+ [Required]
[XmlAttribute("type")]
- public string Type { get; set; }
+ public string? Type { get; set; }
/// Numeric
[XmlAttribute("player")]
diff --git a/SabreTools.Models/Listxml/Device.cs b/SabreTools.Models/Listxml/Device.cs
index 139d8d36..ceb17d66 100644
--- a/SabreTools.Models/Listxml/Device.cs
+++ b/SabreTools.Models/Listxml/Device.cs
@@ -6,8 +6,9 @@ namespace SabreTools.Models.Listxml
[XmlRoot("device")]
public class Device
{
+ [Required]
[XmlAttribute("type")]
- public string Type { get; set; }
+ public string? Type { get; set; }
[XmlAttribute("tag")]
public string? Tag { get; set; }
diff --git a/SabreTools.Models/Listxml/DeviceRef.cs b/SabreTools.Models/Listxml/DeviceRef.cs
index b43639b9..f9b5d8c6 100644
--- a/SabreTools.Models/Listxml/DeviceRef.cs
+++ b/SabreTools.Models/Listxml/DeviceRef.cs
@@ -6,8 +6,9 @@ namespace SabreTools.Models.Listxml
[XmlRoot("device_ref")]
public class DeviceRef
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
#region DO NOT USE IN PRODUCTION
diff --git a/SabreTools.Models/Listxml/DipLocation.cs b/SabreTools.Models/Listxml/DipLocation.cs
index dbdd4b10..adb628d3 100644
--- a/SabreTools.Models/Listxml/DipLocation.cs
+++ b/SabreTools.Models/Listxml/DipLocation.cs
@@ -6,12 +6,14 @@ namespace SabreTools.Models.Listxml
[XmlRoot("diplocation")]
public class DipLocation
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
/// Numeric?
+ [Required]
[XmlAttribute("number")]
- public string Number { get; set; }
+ public string? Number { get; set; }
/// (yes|no) "no"
[XmlAttribute("inverted")]
diff --git a/SabreTools.Models/Listxml/DipSwitch.cs b/SabreTools.Models/Listxml/DipSwitch.cs
index 1754258f..13ab0d96 100644
--- a/SabreTools.Models/Listxml/DipSwitch.cs
+++ b/SabreTools.Models/Listxml/DipSwitch.cs
@@ -6,11 +6,13 @@ namespace SabreTools.Models.Listxml
[XmlRoot("dipswitch")]
public class DipSwitch
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
+ [Required]
[XmlAttribute("tag")]
- public string Tag { get; set; }
+ public string? Tag { get; set; }
[XmlAttribute("mask")]
public string? Mask { get; set; }
diff --git a/SabreTools.Models/Listxml/DipValue.cs b/SabreTools.Models/Listxml/DipValue.cs
index fd6d8ce8..e48a9838 100644
--- a/SabreTools.Models/Listxml/DipValue.cs
+++ b/SabreTools.Models/Listxml/DipValue.cs
@@ -6,11 +6,13 @@ namespace SabreTools.Models.Listxml
[XmlRoot("dipvalue")]
public class DipValue
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
+ [Required]
[XmlAttribute("value")]
- public string Value { get; set; }
+ public string? Value { get; set; }
/// (yes|no) "no"
[XmlAttribute("default")]
diff --git a/SabreTools.Models/Listxml/Disk.cs b/SabreTools.Models/Listxml/Disk.cs
index 5807ce5f..bd979a9b 100644
--- a/SabreTools.Models/Listxml/Disk.cs
+++ b/SabreTools.Models/Listxml/Disk.cs
@@ -6,8 +6,9 @@ namespace SabreTools.Models.Listxml
[XmlRoot("disk")]
public class Disk
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
/// Only present in older versions
[XmlAttribute("md5")]
diff --git a/SabreTools.Models/Listxml/Display.cs b/SabreTools.Models/Listxml/Display.cs
index 0a4bed41..1763d7fe 100644
--- a/SabreTools.Models/Listxml/Display.cs
+++ b/SabreTools.Models/Listxml/Display.cs
@@ -10,8 +10,9 @@ namespace SabreTools.Models.Listxml
public string? Tag { get; set; }
/// (raster|vector|lcd|svg|unknown)
+ [Required]
[XmlAttribute("type")]
- public string Type { get; set; }
+ public string? Type { get; set; }
/// (0|90|180|270)
[XmlAttribute("rotate")]
@@ -30,8 +31,9 @@ namespace SabreTools.Models.Listxml
public string? Height { get; set; }
/// Numeric
+ [Required]
[XmlAttribute("refresh")]
- public string Refresh { get; set; }
+ public string? Refresh { get; set; }
/// Numeric
[XmlAttribute("pixclock")]
diff --git a/SabreTools.Models/Listxml/Driver.cs b/SabreTools.Models/Listxml/Driver.cs
index 23ca06fe..e4480017 100644
--- a/SabreTools.Models/Listxml/Driver.cs
+++ b/SabreTools.Models/Listxml/Driver.cs
@@ -7,8 +7,9 @@ namespace SabreTools.Models.Listxml
public class Driver
{
/// (good|imperfect|preliminary), (good|preliminary|test) in older versions
+ [Required]
[XmlAttribute("status")]
- public string Status { get; set; }
+ public string? Status { get; set; }
/// (good|imperfect|preliminary), Only present in older versions
[XmlAttribute("color")]
@@ -23,16 +24,19 @@ namespace SabreTools.Models.Listxml
public string? PaletteSize { get; set; }
/// (good|imperfect|preliminary)
+ [Required]
[XmlAttribute("emulation")]
- public string Emulation { get; set; }
+ public string? Emulation { get; set; }
/// (good|imperfect|preliminary)
+ [Required]
[XmlAttribute("cocktail")]
- public string Cocktail { get; set; }
+ public string? Cocktail { get; set; }
/// (supported|unsupported)
+ [Required]
[XmlAttribute("savestate")]
- public string SaveState { get; set; }
+ public string? SaveState { get; set; }
/// (yes|no) "no"
[XmlAttribute("requiresartwork")]
diff --git a/SabreTools.Models/Listxml/Extension.cs b/SabreTools.Models/Listxml/Extension.cs
index 4647e333..a73f4909 100644
--- a/SabreTools.Models/Listxml/Extension.cs
+++ b/SabreTools.Models/Listxml/Extension.cs
@@ -6,8 +6,9 @@ namespace SabreTools.Models.Listxml
[XmlRoot("extension")]
public class Extension
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
#region DO NOT USE IN PRODUCTION
diff --git a/SabreTools.Models/Listxml/Feature.cs b/SabreTools.Models/Listxml/Feature.cs
index ac85d181..9610218a 100644
--- a/SabreTools.Models/Listxml/Feature.cs
+++ b/SabreTools.Models/Listxml/Feature.cs
@@ -7,8 +7,9 @@ namespace SabreTools.Models.Listxml
public class Feature
{
/// (protection|timing|graphics|palette|sound|capture|camera|microphone|controls|keyboard|mouse|media|disk|printer|tape|punch|drum|rom|comms|lan|wan)
+ [Required]
[XmlAttribute("type")]
- public string Type { get; set; }
+ public string? Type { get; set; }
/// (unemulated|imperfect)
[XmlAttribute("status")]
diff --git a/SabreTools.Models/Listxml/GameBase.cs b/SabreTools.Models/Listxml/GameBase.cs
index 26507a91..cbb7444d 100644
--- a/SabreTools.Models/Listxml/GameBase.cs
+++ b/SabreTools.Models/Listxml/GameBase.cs
@@ -8,8 +8,9 @@ namespace SabreTools.Models.Listxml
///
public abstract class GameBase
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
/// Machine only
[XmlAttribute("sourcefile")]
@@ -40,8 +41,9 @@ namespace SabreTools.Models.Listxml
[XmlAttribute("sampleof")]
public string? SampleOf { get; set; }
+ [Required]
[XmlElement("description")]
- public string Description { get; set; }
+ public string? Description { get; set; }
[XmlElement("year")]
public string? Year { get; set; }
diff --git a/SabreTools.Models/Listxml/Input.cs b/SabreTools.Models/Listxml/Input.cs
index a16f9cb0..26a76c11 100644
--- a/SabreTools.Models/Listxml/Input.cs
+++ b/SabreTools.Models/Listxml/Input.cs
@@ -15,8 +15,9 @@ namespace SabreTools.Models.Listxml
public string? Tilt { get; set; }
/// Numeric
+ [Required]
[XmlAttribute("players")]
- public string Players { get; set; }
+ public string? Players { get; set; }
/// Only present in older versions
[XmlAttribute("control")]
diff --git a/SabreTools.Models/Listxml/Instance.cs b/SabreTools.Models/Listxml/Instance.cs
index 43d51238..9711a791 100644
--- a/SabreTools.Models/Listxml/Instance.cs
+++ b/SabreTools.Models/Listxml/Instance.cs
@@ -6,11 +6,13 @@ namespace SabreTools.Models.Listxml
[XmlRoot("instance")]
public class Instance
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
+ [Required]
[XmlAttribute("briefname")]
- public string BriefName { get; set; }
+ public string? BriefName { get; set; }
#region DO NOT USE IN PRODUCTION
diff --git a/SabreTools.Models/Listxml/M1.cs b/SabreTools.Models/Listxml/M1.cs
index 977faa9d..a5529ad7 100644
--- a/SabreTools.Models/Listxml/M1.cs
+++ b/SabreTools.Models/Listxml/M1.cs
@@ -11,7 +11,7 @@ namespace SabreTools.Models.Listxml
[XmlElement("machine", typeof(Machine))]
[XmlElement("game", typeof(Game))]
- public GameBase[] Game { get; set; }
+ public GameBase[]? Game { get; set; }
#region DO NOT USE IN PRODUCTION
diff --git a/SabreTools.Models/Listxml/Mame.cs b/SabreTools.Models/Listxml/Mame.cs
index 6b03008e..00117be0 100644
--- a/SabreTools.Models/Listxml/Mame.cs
+++ b/SabreTools.Models/Listxml/Mame.cs
@@ -13,12 +13,13 @@ namespace SabreTools.Models.Listxml
[XmlAttribute("debug")]
public string? Debug { get; set; }
+ [Required]
[XmlAttribute("mameconfig")]
- public string MameConfig { get; set; }
+ public string? MameConfig { get; set; }
[XmlElement("machine", typeof(Machine))]
[XmlElement("game", typeof(Game))]
- public GameBase[] Game { get; set; }
+ public GameBase[]? Game { get; set; }
#region DO NOT USE IN PRODUCTION
diff --git a/SabreTools.Models/Listxml/Port.cs b/SabreTools.Models/Listxml/Port.cs
index f647add3..fe4a6c65 100644
--- a/SabreTools.Models/Listxml/Port.cs
+++ b/SabreTools.Models/Listxml/Port.cs
@@ -6,8 +6,9 @@ namespace SabreTools.Models.Listxml
[XmlRoot("port")]
public class Port
{
+ [Required]
[XmlAttribute("tag")]
- public string Tag { get; set; }
+ public string? Tag { get; set; }
[XmlElement("analog")]
public Analog[]? Analog { get; set; }
diff --git a/SabreTools.Models/Listxml/RamOption.cs b/SabreTools.Models/Listxml/RamOption.cs
index 698944cd..f3e42f7c 100644
--- a/SabreTools.Models/Listxml/RamOption.cs
+++ b/SabreTools.Models/Listxml/RamOption.cs
@@ -6,8 +6,9 @@ namespace SabreTools.Models.Listxml
[XmlRoot("ramoption")]
public class RamOption
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
[XmlAttribute("default")]
public string? Default { get; set; }
diff --git a/SabreTools.Models/Listxml/Rom.cs b/SabreTools.Models/Listxml/Rom.cs
index 6414e417..9f978fe9 100644
--- a/SabreTools.Models/Listxml/Rom.cs
+++ b/SabreTools.Models/Listxml/Rom.cs
@@ -6,15 +6,17 @@ namespace SabreTools.Models.Listxml
[XmlRoot("rom")]
public class Rom
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
[XmlAttribute("bios")]
public string? Bios { get; set; }
/// Numeric
+ [Required]
[XmlAttribute("size")]
- public string Size { get; set; }
+ public string? Size { get; set; }
[XmlAttribute("crc")]
public string? CRC { get; set; }
diff --git a/SabreTools.Models/Listxml/Sample.cs b/SabreTools.Models/Listxml/Sample.cs
index 05278a56..fdfd56bd 100644
--- a/SabreTools.Models/Listxml/Sample.cs
+++ b/SabreTools.Models/Listxml/Sample.cs
@@ -6,8 +6,9 @@ namespace SabreTools.Models.Listxml
[XmlRoot("sample")]
public class Sample
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
#region DO NOT USE IN PRODUCTION
diff --git a/SabreTools.Models/Listxml/Slot.cs b/SabreTools.Models/Listxml/Slot.cs
index cf662402..945194af 100644
--- a/SabreTools.Models/Listxml/Slot.cs
+++ b/SabreTools.Models/Listxml/Slot.cs
@@ -6,8 +6,9 @@ namespace SabreTools.Models.Listxml
[XmlRoot("slot")]
public class Slot
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
[XmlElement("slotoption")]
public SlotOption[]? SlotOption { get; set; }
diff --git a/SabreTools.Models/Listxml/SlotOption.cs b/SabreTools.Models/Listxml/SlotOption.cs
index 9e28c9dc..b47b8273 100644
--- a/SabreTools.Models/Listxml/SlotOption.cs
+++ b/SabreTools.Models/Listxml/SlotOption.cs
@@ -6,11 +6,13 @@ namespace SabreTools.Models.Listxml
[XmlRoot("slotoption")]
public class SlotOption
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
+ [Required]
[XmlAttribute("devname")]
- public string DevName { get; set; }
+ public string? DevName { get; set; }
/// (yes|no) "no"
[XmlAttribute("default")]
diff --git a/SabreTools.Models/Listxml/SoftwareList.cs b/SabreTools.Models/Listxml/SoftwareList.cs
index de304959..7ae155b1 100644
--- a/SabreTools.Models/Listxml/SoftwareList.cs
+++ b/SabreTools.Models/Listxml/SoftwareList.cs
@@ -6,15 +6,18 @@ namespace SabreTools.Models.Listxml
[XmlRoot("softwarelist")]
public class SoftwareList
{
+ [Required]
[XmlAttribute("tag")]
- public string Tag { get; set; }
+ public string? Tag { get; set; }
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
/// (original|compatible)
+ [Required]
[XmlAttribute("status")]
- public string Status { get; set; }
+ public string? Status { get; set; }
[XmlAttribute("filter")]
public string? Filter { get; set; }
diff --git a/SabreTools.Models/Listxml/Sound.cs b/SabreTools.Models/Listxml/Sound.cs
index 83f958c1..5b6c25d8 100644
--- a/SabreTools.Models/Listxml/Sound.cs
+++ b/SabreTools.Models/Listxml/Sound.cs
@@ -7,8 +7,9 @@ namespace SabreTools.Models.Listxml
public class Sound
{
/// Numeric
+ [Required]
[XmlAttribute("channels")]
- public string Channels { get; set; }
+ public string? Channels { get; set; }
#region DO NOT USE IN PRODUCTION
diff --git a/SabreTools.Models/Listxml/Video.cs b/SabreTools.Models/Listxml/Video.cs
index 0f035f05..f50d399f 100644
--- a/SabreTools.Models/Listxml/Video.cs
+++ b/SabreTools.Models/Listxml/Video.cs
@@ -7,12 +7,14 @@ namespace SabreTools.Models.Listxml
public class Video
{
/// (raster|vector)
+ [Required]
[XmlAttribute("screen")]
- public string Screen { get; set; }
+ public string? Screen { get; set; }
/// (vertical|horizontal)
+ [Required]
[XmlAttribute("orientation")]
- public string Orientation { get; set; }
+ public string? Orientation { get; set; }
/// Numeric
[XmlAttribute("width")]
diff --git a/SabreTools.Models/Logiqx/Archive.cs b/SabreTools.Models/Logiqx/Archive.cs
index 116e92b2..60889b0c 100644
--- a/SabreTools.Models/Logiqx/Archive.cs
+++ b/SabreTools.Models/Logiqx/Archive.cs
@@ -6,8 +6,9 @@ namespace SabreTools.Models.Logiqx
[XmlRoot("archive")]
public class Archive
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
#region DO NOT USE IN PRODUCTION
diff --git a/SabreTools.Models/Logiqx/BiosSet.cs b/SabreTools.Models/Logiqx/BiosSet.cs
index 6ee7315c..2695739b 100644
--- a/SabreTools.Models/Logiqx/BiosSet.cs
+++ b/SabreTools.Models/Logiqx/BiosSet.cs
@@ -6,11 +6,13 @@ namespace SabreTools.Models.Logiqx
[XmlRoot("biosset")]
public class BiosSet
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
+ [Required]
[XmlAttribute("description")]
- public string Description { get; set; }
+ public string? Description { get; set; }
/// (yes|no) "no"
[XmlAttribute("default")]
diff --git a/SabreTools.Models/Logiqx/DeviceRef.cs b/SabreTools.Models/Logiqx/DeviceRef.cs
index bad6f97e..7d6ae1b6 100644
--- a/SabreTools.Models/Logiqx/DeviceRef.cs
+++ b/SabreTools.Models/Logiqx/DeviceRef.cs
@@ -6,8 +6,9 @@ namespace SabreTools.Models.Logiqx
[XmlRoot("device_ref")]
public class DeviceRef
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
#region DO NOT USE IN PRODUCTION
diff --git a/SabreTools.Models/Logiqx/Dir.cs b/SabreTools.Models/Logiqx/Dir.cs
index 4a563788..75418ec9 100644
--- a/SabreTools.Models/Logiqx/Dir.cs
+++ b/SabreTools.Models/Logiqx/Dir.cs
@@ -6,8 +6,9 @@ namespace SabreTools.Models.Logiqx
[XmlRoot("dir")]
public class Dir
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
[XmlElement("game", typeof(Game))]
[XmlElement("machine", typeof(Machine))]
diff --git a/SabreTools.Models/Logiqx/Disk.cs b/SabreTools.Models/Logiqx/Disk.cs
index 88b56228..957ff810 100644
--- a/SabreTools.Models/Logiqx/Disk.cs
+++ b/SabreTools.Models/Logiqx/Disk.cs
@@ -6,8 +6,9 @@ namespace SabreTools.Models.Logiqx
[XmlRoot("disk")]
public class Disk
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
[XmlAttribute("md5")]
public string? MD5 { get; set; }
diff --git a/SabreTools.Models/Logiqx/Driver.cs b/SabreTools.Models/Logiqx/Driver.cs
index 2485c552..823605c0 100644
--- a/SabreTools.Models/Logiqx/Driver.cs
+++ b/SabreTools.Models/Logiqx/Driver.cs
@@ -7,20 +7,24 @@ namespace SabreTools.Models.Logiqx
public class Driver
{
/// (good|imperfect|preliminary)
+ [Required]
[XmlAttribute("status")]
- public string Status { get; set; }
+ public string? Status { get; set; }
/// (good|imperfect|preliminary)
+ [Required]
[XmlAttribute("emulation")]
- public string Emulation { get; set; }
+ public string? Emulation { get; set; }
/// (good|imperfect|preliminary)
+ [Required]
[XmlAttribute("cocktail")]
- public string Cocktail { get; set; }
+ public string? Cocktail { get; set; }
/// (supported|unsupported)
+ [Required]
[XmlAttribute("savestate")]
- public string SaveState { get; set; }
+ public string? SaveState { get; set; }
/// (yes|no) "no"
[XmlAttribute("requiresartwork")]
diff --git a/SabreTools.Models/Logiqx/GameBase.cs b/SabreTools.Models/Logiqx/GameBase.cs
index b3ae4980..cdaf2409 100644
--- a/SabreTools.Models/Logiqx/GameBase.cs
+++ b/SabreTools.Models/Logiqx/GameBase.cs
@@ -8,8 +8,9 @@ namespace SabreTools.Models.Logiqx
///
public abstract class GameBase
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
[XmlAttribute("sourcefile")]
public string? SourceFile { get; set; }
@@ -56,8 +57,9 @@ namespace SabreTools.Models.Logiqx
[XmlElement("comment")]
public string[]? Comment { get; set; }
+ [Required]
[XmlElement("description")]
- public string Description { get; set; }
+ public string? Description { get; set; }
[XmlElement("year")]
public string? Year { get; set; }
diff --git a/SabreTools.Models/Logiqx/Header.cs b/SabreTools.Models/Logiqx/Header.cs
index ba63d9d9..8dd020b1 100644
--- a/SabreTools.Models/Logiqx/Header.cs
+++ b/SabreTools.Models/Logiqx/Header.cs
@@ -10,11 +10,13 @@ namespace SabreTools.Models.Logiqx
[XmlElement("id")]
public string? Id { get; set; }
+ [Required]
[XmlElement("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
+ [Required]
[XmlElement("description")]
- public string Description { get; set; }
+ public string? Description { get; set; }
/// Trurip extension
[XmlElement("rootdir")]
@@ -23,14 +25,16 @@ namespace SabreTools.Models.Logiqx
[XmlElement("category")]
public string? Category { get; set; }
+ [Required]
[XmlElement("version")]
- public string Version { get; set; }
+ public string? Version { get; set; }
[XmlElement("date")]
public string? Date { get; set; }
+ [Required]
[XmlElement("author")]
- public string Author { get; set; }
+ public string? Author { get; set; }
[XmlElement("email")]
public string? Email { get; set; }
diff --git a/SabreTools.Models/Logiqx/Media.cs b/SabreTools.Models/Logiqx/Media.cs
index deb1f008..d13fdf75 100644
--- a/SabreTools.Models/Logiqx/Media.cs
+++ b/SabreTools.Models/Logiqx/Media.cs
@@ -6,8 +6,9 @@ namespace SabreTools.Models.Logiqx
[XmlRoot("media")]
public class Media
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
[XmlAttribute("md5")]
public string? MD5 { get; set; }
diff --git a/SabreTools.Models/Logiqx/Release.cs b/SabreTools.Models/Logiqx/Release.cs
index 0210a322..b44fa76b 100644
--- a/SabreTools.Models/Logiqx/Release.cs
+++ b/SabreTools.Models/Logiqx/Release.cs
@@ -6,11 +6,13 @@ namespace SabreTools.Models.Logiqx
[XmlRoot("release")]
public class Release
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
+ [Required]
[XmlAttribute("region")]
- public string Region { get; set; }
+ public string? Region { get; set; }
[XmlAttribute("language")]
public string? Language { get; set; }
diff --git a/SabreTools.Models/Logiqx/Rom.cs b/SabreTools.Models/Logiqx/Rom.cs
index 525bf289..6866113e 100644
--- a/SabreTools.Models/Logiqx/Rom.cs
+++ b/SabreTools.Models/Logiqx/Rom.cs
@@ -6,11 +6,13 @@ namespace SabreTools.Models.Logiqx
[XmlRoot("rom")]
public class Rom
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
+ [Required]
[XmlAttribute("size")]
- public string Size { get; set; }
+ public string? Size { get; set; }
[XmlAttribute("crc")]
public string? CRC { get; set; }
diff --git a/SabreTools.Models/Logiqx/Sample.cs b/SabreTools.Models/Logiqx/Sample.cs
index e9c05638..98901f36 100644
--- a/SabreTools.Models/Logiqx/Sample.cs
+++ b/SabreTools.Models/Logiqx/Sample.cs
@@ -6,8 +6,9 @@ namespace SabreTools.Models.Logiqx
[XmlRoot("sample")]
public class Sample
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
#region DO NOT USE IN PRODUCTION
diff --git a/SabreTools.Models/Logiqx/SoftwareList.cs b/SabreTools.Models/Logiqx/SoftwareList.cs
index b2e3d91c..36cabc85 100644
--- a/SabreTools.Models/Logiqx/SoftwareList.cs
+++ b/SabreTools.Models/Logiqx/SoftwareList.cs
@@ -6,15 +6,18 @@ namespace SabreTools.Models.Logiqx
[XmlRoot("softwarelist")]
public class SoftwareList
{
+ [Required]
[XmlAttribute("tag")]
- public string Tag { get; set; }
+ public string? Tag { get; set; }
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
/// (original|compatible)
+ [Required]
[XmlAttribute("status")]
- public string Status { get; set; }
+ public string? Status { get; set; }
[XmlAttribute("filter")]
public string? Filter { get; set; }
diff --git a/SabreTools.Models/OpenMSX/Software.cs b/SabreTools.Models/OpenMSX/Software.cs
index a86b9b05..29167e15 100644
--- a/SabreTools.Models/OpenMSX/Software.cs
+++ b/SabreTools.Models/OpenMSX/Software.cs
@@ -6,23 +6,28 @@ namespace SabreTools.Models.OpenMSX
[XmlRoot("software")]
public class Software
{
+ [Required]
[XmlElement("title")]
- public string Title { get; set; }
+ public string? Title { get; set; }
[XmlElement("genmsxid")]
public string? GenMSXID { get; set; }
+ [Required]
[XmlElement("system")]
- public string System { get; set; }
+ public string? System { get; set; }
+ [Required]
[XmlElement("company")]
- public string Company { get; set; }
+ public string? Company { get; set; }
+ [Required]
[XmlElement("year")]
- public string Year { get; set; }
+ public string? Year { get; set; }
+ [Required]
[XmlElement("country")]
- public string Country { get; set; }
+ public string? Country { get; set; }
[XmlElement("dump")]
public Dump[]? Dump { get; set; }
diff --git a/SabreTools.Models/RequiredAttribute.cs b/SabreTools.Models/RequiredAttribute.cs
new file mode 100644
index 00000000..dfb4eb5c
--- /dev/null
+++ b/SabreTools.Models/RequiredAttribute.cs
@@ -0,0 +1,9 @@
+namespace SabreTools.Models
+{
+ ///
+ /// Marks a property as required on write
+ ///
+ /// TODO: Use reflection to determine required fields on write
+ [System.AttributeUsage(System.AttributeTargets.Property)]
+ public class RequiredAttribute : System.Attribute { }
+}
\ No newline at end of file
diff --git a/SabreTools.Models/SeparatedValue/MetadataFile.cs b/SabreTools.Models/SeparatedValue/MetadataFile.cs
index cc9f81bd..7fddc2eb 100644
--- a/SabreTools.Models/SeparatedValue/MetadataFile.cs
+++ b/SabreTools.Models/SeparatedValue/MetadataFile.cs
@@ -2,7 +2,8 @@ namespace SabreTools.Models.SeparatedValue
{
public class MetadataFile
{
- public string[] Header { get; set; }
+ [Required]
+ public string[]? Header { get; set; }
public Row[]? Row { get; set; }
}
diff --git a/SabreTools.Models/SeparatedValue/Row.cs b/SabreTools.Models/SeparatedValue/Row.cs
index 44979ffb..b9f170c1 100644
--- a/SabreTools.Models/SeparatedValue/Row.cs
+++ b/SabreTools.Models/SeparatedValue/Row.cs
@@ -15,13 +15,15 @@ namespace SabreTools.Models.SeparatedValue
public string? Description { get; set; }
/// Game Name
- public string GameName { get; set; }
+ [Required]
+ public string? GameName { get; set; }
/// Game Description
public string? GameDescription { get; set; }
/// Type
- public string Type { get; set; }
+ [Required]
+ public string? Type { get; set; }
/// Rom Name
public string? RomName { get; set; }
diff --git a/SabreTools.Models/SoftwareList/DataArea.cs b/SabreTools.Models/SoftwareList/DataArea.cs
index 6da72615..d58ae7f1 100644
--- a/SabreTools.Models/SoftwareList/DataArea.cs
+++ b/SabreTools.Models/SoftwareList/DataArea.cs
@@ -6,11 +6,13 @@ namespace SabreTools.Models.SoftwareList
[XmlRoot("dataarea")]
public class DataArea
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
+ [Required]
[XmlAttribute("size")]
- public string Size { get; set; }
+ public string? Size { get; set; }
/// (8|16|32|64) "8"
[XmlAttribute("width")]
diff --git a/SabreTools.Models/SoftwareList/DipSwitch.cs b/SabreTools.Models/SoftwareList/DipSwitch.cs
index 8fbdaf93..2fd6fd3d 100644
--- a/SabreTools.Models/SoftwareList/DipSwitch.cs
+++ b/SabreTools.Models/SoftwareList/DipSwitch.cs
@@ -6,11 +6,13 @@ namespace SabreTools.Models.SoftwareList
[XmlRoot("dipswitch")]
public class DipSwitch
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
+ [Required]
[XmlAttribute("tag")]
- public string Tag { get; set; }
+ public string? Tag { get; set; }
[XmlAttribute("mask")]
public string? Mask { get; set; }
diff --git a/SabreTools.Models/SoftwareList/DipValue.cs b/SabreTools.Models/SoftwareList/DipValue.cs
index 5bbfccfc..1f70bd05 100644
--- a/SabreTools.Models/SoftwareList/DipValue.cs
+++ b/SabreTools.Models/SoftwareList/DipValue.cs
@@ -6,11 +6,13 @@ namespace SabreTools.Models.SoftwareList
[XmlRoot("dipvalue")]
public class DipValue
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
+ [Required]
[XmlAttribute("value")]
- public string Value { get; set; }
+ public string? Value { get; set; }
/// (yes|no) "no"
[XmlAttribute("default")]
diff --git a/SabreTools.Models/SoftwareList/Disk.cs b/SabreTools.Models/SoftwareList/Disk.cs
index 8090eaae..ca0cbe3d 100644
--- a/SabreTools.Models/SoftwareList/Disk.cs
+++ b/SabreTools.Models/SoftwareList/Disk.cs
@@ -6,8 +6,9 @@ namespace SabreTools.Models.SoftwareList
[XmlRoot("disk")]
public class Disk
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
[XmlAttribute("md5")]
public string? MD5 { get; set; }
diff --git a/SabreTools.Models/SoftwareList/DiskArea.cs b/SabreTools.Models/SoftwareList/DiskArea.cs
index 01b72456..20bba255 100644
--- a/SabreTools.Models/SoftwareList/DiskArea.cs
+++ b/SabreTools.Models/SoftwareList/DiskArea.cs
@@ -6,8 +6,9 @@ namespace SabreTools.Models.SoftwareList
[XmlRoot("diskarea")]
public class DiskArea
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
[XmlElement("disk")]
public Disk[]? Disk { get; set; }
diff --git a/SabreTools.Models/SoftwareList/Feature.cs b/SabreTools.Models/SoftwareList/Feature.cs
index 82c8fbf1..2d15ec4e 100644
--- a/SabreTools.Models/SoftwareList/Feature.cs
+++ b/SabreTools.Models/SoftwareList/Feature.cs
@@ -6,8 +6,9 @@ namespace SabreTools.Models.SoftwareList
[XmlRoot("feature")]
public class Feature
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
[XmlAttribute("value")]
public string? Value { get; set; }
diff --git a/SabreTools.Models/SoftwareList/Info.cs b/SabreTools.Models/SoftwareList/Info.cs
index eced145d..b68f5d7e 100644
--- a/SabreTools.Models/SoftwareList/Info.cs
+++ b/SabreTools.Models/SoftwareList/Info.cs
@@ -6,8 +6,9 @@ namespace SabreTools.Models.SoftwareList
[XmlRoot("info")]
public class Info
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
[XmlAttribute("value")]
public string? Value { get; set; }
diff --git a/SabreTools.Models/SoftwareList/Part.cs b/SabreTools.Models/SoftwareList/Part.cs
index 96125aeb..d4ff21f2 100644
--- a/SabreTools.Models/SoftwareList/Part.cs
+++ b/SabreTools.Models/SoftwareList/Part.cs
@@ -6,11 +6,13 @@ namespace SabreTools.Models.SoftwareList
[XmlRoot("part")]
public class Part
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
+ [Required]
[XmlAttribute("interface")]
- public string Interface { get; set; }
+ public string? Interface { get; set; }
[XmlElement("feature")]
public Feature[]? Feature { get; set; }
diff --git a/SabreTools.Models/SoftwareList/Rom.cs b/SabreTools.Models/SoftwareList/Rom.cs
index 16fef098..e738389f 100644
--- a/SabreTools.Models/SoftwareList/Rom.cs
+++ b/SabreTools.Models/SoftwareList/Rom.cs
@@ -6,8 +6,9 @@ namespace SabreTools.Models.SoftwareList
[XmlRoot("rom")]
public class Rom
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
[XmlAttribute("size")]
public string? Size { get; set; }
diff --git a/SabreTools.Models/SoftwareList/SharedFeat.cs b/SabreTools.Models/SoftwareList/SharedFeat.cs
index e0b46e1b..22c1b493 100644
--- a/SabreTools.Models/SoftwareList/SharedFeat.cs
+++ b/SabreTools.Models/SoftwareList/SharedFeat.cs
@@ -6,8 +6,9 @@ namespace SabreTools.Models.SoftwareList
[XmlRoot("sharedfeat")]
public class SharedFeat
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
[XmlAttribute("value")]
public string? Value { get; set; }
diff --git a/SabreTools.Models/SoftwareList/Software.cs b/SabreTools.Models/SoftwareList/Software.cs
index 5fa19bb4..194acd8b 100644
--- a/SabreTools.Models/SoftwareList/Software.cs
+++ b/SabreTools.Models/SoftwareList/Software.cs
@@ -6,8 +6,9 @@ namespace SabreTools.Models.SoftwareList
[XmlRoot("software")]
public class Software
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
[XmlAttribute("cloneof")]
public string? CloneOf { get; set; }
@@ -16,14 +17,17 @@ namespace SabreTools.Models.SoftwareList
[XmlAttribute("supported")]
public string? Supported { get; set; }
+ [Required]
[XmlElement("description")]
- public string Description { get; set; }
+ public string? Description { get; set; }
+ [Required]
[XmlElement("year")]
- public string Year { get; set; }
+ public string? Year { get; set; }
+ [Required]
[XmlElement("publisher")]
- public string Publisher { get; set; }
+ public string? Publisher { get; set; }
[XmlElement("notes")]
public string? Notes { get; set; }
diff --git a/SabreTools.Models/SoftwareList/SoftwareList.cs b/SabreTools.Models/SoftwareList/SoftwareList.cs
index e374574e..8dd27821 100644
--- a/SabreTools.Models/SoftwareList/SoftwareList.cs
+++ b/SabreTools.Models/SoftwareList/SoftwareList.cs
@@ -6,8 +6,9 @@ namespace SabreTools.Models.SoftwareList
[XmlRoot("softwarelist")]
public class SoftwareList
{
+ [Required]
[XmlAttribute("name")]
- public string Name { get; set; }
+ public string? Name { get; set; }
[XmlAttribute("description")]
public string? Description { get; set; }
@@ -16,7 +17,7 @@ namespace SabreTools.Models.SoftwareList
public string? Notes { get; set; }
[XmlElement("software")]
- public Software[] Software { get; set; }
+ public Software[]? Software { get; set; }
#region DO NOT USE IN PRODUCTION