mirror of
https://github.com/SabreTools/SabreTools.Serialization.git
synced 2026-07-08 18:06:41 +00:00
Original is cloneable and comparable
This commit is contained in:
@@ -174,6 +174,8 @@ namespace SabreTools.Data.Extensions
|
||||
return info.Clone() as Info;
|
||||
else if (self is Instance instance)
|
||||
return instance.Clone() as Instance;
|
||||
else if (self is Original original)
|
||||
return original.Clone() as Original;
|
||||
else if (self is RamOption ramOption)
|
||||
return ramOption.Clone() as RamOption;
|
||||
else if (self is SharedFeat sharedFeat)
|
||||
@@ -301,10 +303,6 @@ namespace SabreTools.Data.Extensions
|
||||
cloneMachine.Runnable = selfMachine.Runnable;
|
||||
cloneMachine.Supported = selfMachine.Supported;
|
||||
}
|
||||
else if (self is Original selfOriginal && clone is Original cloneOriginal)
|
||||
{
|
||||
cloneOriginal.Content = selfOriginal.Content;
|
||||
}
|
||||
else if (self is Part selfPart && clone is Part clonePart)
|
||||
{
|
||||
clonePart.Interface = selfPart.Interface;
|
||||
|
||||
@@ -1,24 +1,50 @@
|
||||
using System;
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace SabreTools.Data.Models.Metadata
|
||||
{
|
||||
[JsonObject("original"), XmlRoot("original")]
|
||||
public class Original : DatItem
|
||||
public class Original : DatItem, ICloneable, IEquatable<Original>
|
||||
{
|
||||
#region Properties
|
||||
|
||||
public string? Content { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Keys
|
||||
|
||||
/// <remarks>bool</remarks>
|
||||
public const string ValueKey = "value";
|
||||
public bool? Value { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
public Original() => ItemType = ItemType.Original;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public object Clone()
|
||||
{
|
||||
var obj = new Original();
|
||||
|
||||
obj.Content = Content;
|
||||
obj.Value = Value;
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public bool Equals(Original? other)
|
||||
{
|
||||
// Null never matches
|
||||
if (other is null)
|
||||
return false;
|
||||
|
||||
// Properties
|
||||
if ((Content is null) ^ (other.Content is null))
|
||||
return false;
|
||||
else if (Content is not null && !Content.Equals(other.Content, StringComparison.OrdinalIgnoreCase))
|
||||
return false;
|
||||
|
||||
if (Value != other.Value)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,9 +6,8 @@ namespace SabreTools.Data.Models.OpenMSX
|
||||
[XmlRoot("original")]
|
||||
public class Original
|
||||
{
|
||||
/// <remarks>Boolean?</remarks>
|
||||
[XmlAttribute("value")]
|
||||
public string? Value { get; set; }
|
||||
public bool? Value { get; set; }
|
||||
|
||||
[XmlText]
|
||||
public string? Content { get; set; }
|
||||
|
||||
@@ -697,7 +697,7 @@ namespace SabreTools.Metadata.DatFiles.Test
|
||||
return new Data.Models.Metadata.Original
|
||||
{
|
||||
Content = "content",
|
||||
[Data.Models.Metadata.Original.ValueKey] = true,
|
||||
Value = true,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using SabreTools.Data.Extensions;
|
||||
using SabreTools.Metadata.DatItems;
|
||||
using OpenMSXSubType = SabreTools.Data.Models.Metadata.OpenMSXSubType;
|
||||
|
||||
@@ -983,7 +982,7 @@ namespace SabreTools.Metadata.DatFiles
|
||||
{
|
||||
var newOriginal = new Data.Models.Metadata.Original
|
||||
{
|
||||
[Data.Models.Metadata.Original.ValueKey] = romOriginal.Value.FromYesNo(),
|
||||
Value = romOriginal.Value,
|
||||
Content = romOriginal.Content,
|
||||
};
|
||||
dumpRom[Data.Models.Metadata.Dump.OriginalKey] = newOriginal;
|
||||
@@ -1011,7 +1010,7 @@ namespace SabreTools.Metadata.DatFiles
|
||||
{
|
||||
var newOriginal = new Data.Models.Metadata.Original
|
||||
{
|
||||
[Data.Models.Metadata.Original.ValueKey] = megaRomOriginal.Value.FromYesNo(),
|
||||
Value = megaRomOriginal.Value,
|
||||
Content = megaRomOriginal.Content,
|
||||
};
|
||||
dumpMegaRom[Data.Models.Metadata.Dump.OriginalKey] = newOriginal;
|
||||
@@ -1039,7 +1038,7 @@ namespace SabreTools.Metadata.DatFiles
|
||||
{
|
||||
var newOriginal = new Data.Models.Metadata.Original
|
||||
{
|
||||
[Data.Models.Metadata.Original.ValueKey] = sccPlusCartOriginal.Value.FromYesNo(),
|
||||
Value = sccPlusCartOriginal.Value,
|
||||
Content = sccPlusCartOriginal.Content,
|
||||
};
|
||||
dumpSccPlusCart[Data.Models.Metadata.Dump.OriginalKey] = newOriginal;
|
||||
|
||||
@@ -25,8 +25,8 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
[JsonProperty("value"), XmlElement("value")]
|
||||
public bool? Value
|
||||
{
|
||||
get => _internal.ReadBool(Data.Models.Metadata.Original.ValueKey);
|
||||
set => _internal[Data.Models.Metadata.Original.ValueKey] = value;
|
||||
get => _internal.Value;
|
||||
set => _internal.Value = value;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -191,7 +191,7 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
{
|
||||
Write<Original?>("ORIGINAL", new Original
|
||||
{
|
||||
Value = original.ReadBool(Data.Models.Metadata.Original.ValueKey),
|
||||
Value = original.Value,
|
||||
Content = original.Content,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -752,6 +752,9 @@ namespace SabreTools.Metadata.Filter
|
||||
case Original item when fieldName == "content":
|
||||
checkValue = item.Content;
|
||||
return true;
|
||||
case Original item when fieldName == "value":
|
||||
checkValue = item.Value.FromYesNo();
|
||||
return true;
|
||||
|
||||
case Part item when fieldName == "interface":
|
||||
checkValue = item.Interface;
|
||||
|
||||
@@ -291,7 +291,7 @@ namespace SabreTools.Metadata
|
||||
}
|
||||
else if (self is Original selfOriginal && other is Original otherOriginal)
|
||||
{
|
||||
if (selfOriginal.Content != otherOriginal.Content)
|
||||
if (!selfOriginal.Equals(otherOriginal))
|
||||
return false;
|
||||
}
|
||||
else if (self is Part selfPart && other is Part otherPart)
|
||||
|
||||
@@ -36,7 +36,7 @@ namespace SabreTools.Serialization.CrossModel.Test
|
||||
{
|
||||
var original = new Data.Models.OpenMSX.Original
|
||||
{
|
||||
Value = "value",
|
||||
Value = true,
|
||||
Content = "content",
|
||||
};
|
||||
|
||||
@@ -137,7 +137,7 @@ namespace SabreTools.Serialization.CrossModel.Test
|
||||
private static void Validate(Data.Models.OpenMSX.Original? original)
|
||||
{
|
||||
Assert.NotNull(original);
|
||||
Assert.Equal("value", original.Value);
|
||||
Assert.Equal(true, original.Value);
|
||||
Assert.Equal("content", original.Content);
|
||||
}
|
||||
|
||||
|
||||
@@ -103,7 +103,7 @@ namespace SabreTools.Serialization.CrossModel
|
||||
{
|
||||
var original = new Original
|
||||
{
|
||||
Value = item.ReadString(Data.Models.Metadata.Original.ValueKey),
|
||||
Value = item.Value,
|
||||
Content = item.Content,
|
||||
};
|
||||
return original;
|
||||
|
||||
@@ -103,7 +103,7 @@ namespace SabreTools.Serialization.CrossModel
|
||||
{
|
||||
var original = new Data.Models.Metadata.Original
|
||||
{
|
||||
[Data.Models.Metadata.Original.ValueKey] = item.Value,
|
||||
Value = item.Value,
|
||||
Content = item.Content,
|
||||
};
|
||||
return original;
|
||||
|
||||
@@ -102,7 +102,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
{
|
||||
var original = new Data.Models.OpenMSX.Original
|
||||
{
|
||||
Value = "value",
|
||||
Value = true,
|
||||
Content = "content",
|
||||
};
|
||||
|
||||
@@ -203,7 +203,7 @@ namespace SabreTools.Serialization.Readers.Test
|
||||
private static void Validate(Data.Models.OpenMSX.Original? original)
|
||||
{
|
||||
Assert.NotNull(original);
|
||||
Assert.Equal("value", original.Value);
|
||||
Assert.Equal(true, original.Value);
|
||||
Assert.Equal("content", original.Content);
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Xml;
|
||||
using SabreTools.Data.Extensions;
|
||||
using SabreTools.Data.Models.OpenMSX;
|
||||
|
||||
namespace SabreTools.Serialization.Readers
|
||||
@@ -163,7 +164,7 @@ namespace SabreTools.Serialization.Readers
|
||||
{
|
||||
var obj = new Original();
|
||||
|
||||
obj.Value = reader.GetAttribute("value");
|
||||
obj.Value = reader.GetAttribute("value").AsYesNo();
|
||||
obj.Content = reader.ReadElementContentAsString();
|
||||
|
||||
return obj;
|
||||
|
||||
@@ -115,7 +115,7 @@ namespace SabreTools.Serialization.Writers
|
||||
{
|
||||
writer.WriteStartElement("original");
|
||||
|
||||
writer.WriteOptionalAttributeString("value", obj.Value);
|
||||
writer.WriteOptionalAttributeString("value", obj.Value?.ToString().ToLowerInvariant());
|
||||
|
||||
if (obj.Content is not null)
|
||||
writer.WriteRaw(obj.Content);
|
||||
|
||||
Reference in New Issue
Block a user