using System; using System.Xml.Serialization; using Newtonsoft.Json; using SabreTools.Data.Extensions; namespace SabreTools.Metadata.DatItems.Formats { /// /// Represents which Slot(s) is associated with a set /// [JsonObject("slot"), XmlRoot("slot")] public sealed class Slot : DatItem { #region Fields /// /> protected override ItemType ItemType => ItemType.Slot; [JsonIgnore] public bool SlotOptionsSpecified { get { var slotOptions = Read(Data.Models.Metadata.Slot.SlotOptionKey); return slotOptions is not null && slotOptions.Length > 0; } } #endregion #region Constructors public Slot() : base() { } public Slot(Data.Models.Metadata.Slot item) : base(item) { // Handle subitems var slotOptions = item.ReadArray(Data.Models.Metadata.Slot.SlotOptionKey); if (slotOptions is not null) { SlotOption[] slotOptionItems = Array.ConvertAll(slotOptions, slotOption => new SlotOption(slotOption)); Write(Data.Models.Metadata.Slot.SlotOptionKey, slotOptionItems); } } public Slot(Data.Models.Metadata.Slot item, Machine machine, Source source) : this(item) { Write(SourceKey, source); CopyMachineInformation(machine); } #endregion #region Cloning Methods /// public override object Clone() => new Slot(_internal.Clone() as Data.Models.Metadata.Slot ?? []); /// public override Data.Models.Metadata.Slot GetInternalClone() { var slotItem = base.GetInternalClone(); var slotOptions = Read(Data.Models.Metadata.Slot.SlotOptionKey); if (slotOptions is not null) { Data.Models.Metadata.SlotOption[] slotOptionItems = Array.ConvertAll(slotOptions, slotOption => slotOption.GetInternalClone()); slotItem[Data.Models.Metadata.Slot.SlotOptionKey] = slotOptionItems; } return slotItem; } #endregion } }