mirror of
https://github.com/SabreTools/SabreTools.Serialization.git
synced 2026-07-17 22:35:18 +00:00
Convert Port fully over to properties
This commit is contained in:
@@ -194,6 +194,8 @@ namespace SabreTools.Data.Extensions
|
||||
return media.Clone() as Media;
|
||||
else if (self is Original original)
|
||||
return original.Clone() as Original;
|
||||
else if (self is Port port)
|
||||
return port.Clone() as Port;
|
||||
else if (self is RamOption ramOption)
|
||||
return ramOption.Clone() as RamOption;
|
||||
else if (self is Release release)
|
||||
@@ -331,10 +333,6 @@ namespace SabreTools.Data.Extensions
|
||||
{
|
||||
clonePart.Interface = selfPart.Interface;
|
||||
}
|
||||
else if (self is Port selfPort && clone is Port clonePort)
|
||||
{
|
||||
clonePort.Tag = selfPort.Tag;
|
||||
}
|
||||
else if (self is Rom selfRom && clone is Rom cloneRom)
|
||||
{
|
||||
cloneRom.Dispose = selfRom.Dispose;
|
||||
|
||||
@@ -1,25 +1,51 @@
|
||||
using System;
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace SabreTools.Data.Models.Metadata
|
||||
{
|
||||
[JsonObject("port"), XmlRoot("port")]
|
||||
public class Port : DatItem
|
||||
public class Port : DatItem, ICloneable, IEquatable<Port>
|
||||
{
|
||||
#region Properties
|
||||
|
||||
public Analog[]? Analog { get; set; }
|
||||
|
||||
public string? Tag { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Keys
|
||||
|
||||
/// <remarks>Analog[]</remarks>
|
||||
[NoFilter]
|
||||
public const string AnalogKey = "analog";
|
||||
|
||||
#endregion
|
||||
|
||||
public Port() => ItemType = ItemType.Port;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public object Clone()
|
||||
{
|
||||
var obj = new Port();
|
||||
|
||||
if (Analog is not null)
|
||||
obj.Analog = Array.ConvertAll(Analog, i => (Analog)i.Clone());
|
||||
obj.Tag = Tag;
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public bool Equals(Port? other)
|
||||
{
|
||||
// Null never matches
|
||||
if (other is null)
|
||||
return false;
|
||||
|
||||
// Properties
|
||||
if ((Tag is null) ^ (other.Tag is null))
|
||||
return false;
|
||||
else if (Tag is not null && !Tag.Equals(other.Tag, StringComparison.OrdinalIgnoreCase))
|
||||
return false;
|
||||
|
||||
// Sub-items
|
||||
// TODO: Figure out how to properly check arrays
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -717,7 +717,7 @@ namespace SabreTools.Metadata.DatFiles.Test
|
||||
{
|
||||
return new Data.Models.Metadata.Port
|
||||
{
|
||||
[Data.Models.Metadata.Port.AnalogKey] = new Data.Models.Metadata.Analog[] { CreateMetadataAnalog() },
|
||||
Analog = [CreateMetadataAnalog()],
|
||||
Tag = "tag",
|
||||
};
|
||||
}
|
||||
@@ -1441,7 +1441,7 @@ namespace SabreTools.Metadata.DatFiles.Test
|
||||
Assert.NotNull(port);
|
||||
Assert.Equal("tag", port.Tag);
|
||||
|
||||
Analog[]? dipValues = port.Read<Analog[]>(Data.Models.Metadata.Port.AnalogKey);
|
||||
Analog[]? dipValues = port.Analog;
|
||||
Assert.NotNull(dipValues);
|
||||
Analog? dipValue = Assert.Single(dipValues);
|
||||
ValidateAnalog(dipValue);
|
||||
|
||||
@@ -985,7 +985,7 @@ namespace SabreTools.Metadata.DatFiles.Test
|
||||
Assert.NotNull(port);
|
||||
Assert.Equal("tag", port.Tag);
|
||||
|
||||
Data.Models.Metadata.Analog[]? dipValues = port.ReadArray<Data.Models.Metadata.Analog>(Data.Models.Metadata.Port.AnalogKey);
|
||||
Data.Models.Metadata.Analog[]? dipValues = port.Analog;
|
||||
Assert.NotNull(dipValues);
|
||||
Data.Models.Metadata.Analog? dipValue = Assert.Single(dipValues);
|
||||
ValidateMetadataAnalog(dipValue);
|
||||
|
||||
@@ -13,15 +13,10 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
{
|
||||
#region Fields
|
||||
|
||||
public Analog[]? Analog { get; set; }
|
||||
|
||||
[JsonIgnore]
|
||||
public bool AnalogsSpecified
|
||||
{
|
||||
get
|
||||
{
|
||||
var analogs = Read<Analog[]?>(Data.Models.Metadata.Port.AnalogKey);
|
||||
return analogs is not null && analogs.Length > 0;
|
||||
}
|
||||
}
|
||||
public bool AnalogSpecified => Analog is not null && Analog.Length > 0;
|
||||
|
||||
/// <inheritdoc>/>
|
||||
public override Data.Models.Metadata.ItemType ItemType
|
||||
@@ -42,12 +37,8 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
public Port(Data.Models.Metadata.Port item) : base(item)
|
||||
{
|
||||
// Handle subitems
|
||||
var analogs = item.ReadArray<Data.Models.Metadata.Analog>(Data.Models.Metadata.Port.AnalogKey);
|
||||
if (analogs is not null)
|
||||
{
|
||||
Analog[] analogItems = Array.ConvertAll(analogs, analog => new Analog(analog));
|
||||
Write<Analog[]?>(Data.Models.Metadata.Port.AnalogKey, analogItems);
|
||||
}
|
||||
if (item.Analog is not null)
|
||||
Analog = Array.ConvertAll(item.Analog, analog => new Analog(analog)); ;
|
||||
}
|
||||
|
||||
public Port(Data.Models.Metadata.Port item, Machine machine, Source source) : this(item)
|
||||
@@ -68,12 +59,8 @@ namespace SabreTools.Metadata.DatItems.Formats
|
||||
{
|
||||
var portItem = base.GetInternalClone();
|
||||
|
||||
var analogs = Read<Analog[]?>(Data.Models.Metadata.Port.AnalogKey);
|
||||
if (analogs is not null)
|
||||
{
|
||||
Data.Models.Metadata.Analog[] analogItems = Array.ConvertAll(analogs, analog => analog.GetInternalClone());
|
||||
portItem[Data.Models.Metadata.Port.AnalogKey] = analogItems;
|
||||
}
|
||||
if (Analog is not null)
|
||||
portItem.Analog = Array.ConvertAll(Analog, analog => analog.GetInternalClone());
|
||||
|
||||
return portItem;
|
||||
}
|
||||
|
||||
@@ -361,7 +361,7 @@ namespace SabreTools.Metadata
|
||||
}
|
||||
else if (self is Port selfPort && other is Port otherPort)
|
||||
{
|
||||
if (selfPort.Tag != otherPort.Tag)
|
||||
if (!selfPort.Equals(otherPort))
|
||||
return false;
|
||||
}
|
||||
else if (self is RamOption selfRamOption && other is RamOption otherRamOption)
|
||||
|
||||
@@ -534,7 +534,7 @@ namespace SabreTools.Serialization.CrossModel
|
||||
Tag = item.Tag,
|
||||
};
|
||||
|
||||
var analogs = item.Read<Data.Models.Metadata.Analog[]>(Data.Models.Metadata.Port.AnalogKey);
|
||||
var analogs = item.Analog;
|
||||
if (analogs is not null && analogs.Length > 0)
|
||||
port.Analog = Array.ConvertAll(analogs, ConvertFromInternalModel);
|
||||
|
||||
|
||||
@@ -557,10 +557,7 @@ namespace SabreTools.Serialization.CrossModel
|
||||
};
|
||||
|
||||
if (item.Analog is not null && item.Analog.Length > 0)
|
||||
{
|
||||
port[Data.Models.Metadata.Port.AnalogKey]
|
||||
= Array.ConvertAll(item.Analog, ConvertToInternalModel);
|
||||
}
|
||||
port.Analog = Array.ConvertAll(item.Analog, ConvertToInternalModel);
|
||||
|
||||
return port;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user