using System.Collections.Generic; using System.Linq; using System.Xml.Serialization; using Newtonsoft.Json; using SabreTools.Core; namespace SabreTools.DatItems.Formats { /// /// Represents a single port on a machine /// [JsonObject("port"), XmlRoot("port")] public class Port : DatItem { #region Fields /// /// Tag for the port /// [JsonProperty("tag", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("tag")] public string? Tag { get => _internal.ReadString(Models.Internal.Port.TagKey); set => _internal[Models.Internal.Port.TagKey] = value; } /// /// List of analogs on the port /// [JsonProperty("analogs", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("analogs")] public List? Analogs { get => _internal.Read(Models.Internal.Port.AnalogKey)?.ToList(); set => _internal[Models.Internal.Port.AnalogKey] = value?.ToArray(); } [JsonIgnore] public bool AnalogsSpecified { get { return Analogs != null && Analogs.Count > 0; } } #endregion #region Constructors /// /// Create a default, empty Port object /// public Port() { _internal = new Models.Internal.Port(); ItemType = ItemType.Port; } #endregion #region Cloning Methods /// public override object Clone() { return new Port() { ItemType = this.ItemType, DupeType = this.DupeType, Machine = this.Machine?.Clone() as Machine, Source = this.Source?.Clone() as Source, Remove = this.Remove, _internal = this._internal?.Clone() as Models.Internal.Port ?? new Models.Internal.Port(), }; } #endregion } }