using System.Collections.Generic; using System.ComponentModel; using System.Runtime.Serialization; using GitHub.Services.WebApi; namespace GitHub.Build.WebApi { /// /// For back-compat with extensions that use the old Steps format instead of Process and Phases /// [DataContract] [EditorBrowsable(EditorBrowsableState.Never)] public class BuildDefinitionReference3_2 : DefinitionReference { public BuildDefinitionReference3_2() { Type = DefinitionType.Build; QueueStatus = DefinitionQueueStatus.Enabled; } /// /// The quality of the definition document (draft, etc.) /// [DataMember(EmitDefaultValue = false, Name = "Quality")] public DefinitionQuality? DefinitionQuality { get; set; } /// /// The author of the definition. /// [DataMember(EmitDefaultValue = false)] public IdentityRef AuthoredBy { get; [EditorBrowsable(EditorBrowsableState.Never)] set; } /// /// A reference to the definition that this definition is a draft of, if this is a draft definition. /// [DataMember(EmitDefaultValue = false, Name = "draftOf")] public DefinitionReference ParentDefinition { get; set; } /// /// The list of drafts associated with this definition, if this is not a draft definition. /// [DataMember(EmitDefaultValue = false)] public List Drafts { get { return m_drafts ?? (m_drafts = new List()); } internal set { m_drafts = value; } } /// /// The default queue for builds run against this definition. /// [DataMember(EmitDefaultValue = false)] public AgentPoolQueue Queue { get; set; } /// /// The metrics for this definition. /// public List Metrics { get { return m_metrics ?? (m_metrics = new List()); } internal set { m_metrics = value; } } /// /// The links to other objects related to this object. /// public ReferenceLinks Links => m_links ?? (m_links = new ReferenceLinks()); [OnDeserialized] private void OnDeserialized(StreamingContext context) { SerializationHelper.Copy(ref m_serializedMetrics, ref m_metrics, true); } [OnSerializing] private void OnSerializing(StreamingContext context) { SerializationHelper.Copy(ref m_metrics, ref m_serializedMetrics); } [OnSerialized] private void OnSerialized(StreamingContext context) { m_serializedMetrics = null; } [DataMember(Name = "Metrics", EmitDefaultValue = false)] private List m_serializedMetrics; [DataMember(Name = "_links", EmitDefaultValue = false)] private ReferenceLinks m_links; private List m_metrics; private List m_drafts; } }