using System; using System.Runtime.Serialization; using GitHub.Services.WebApi; namespace GitHub.DistributedTask.WebApi { /// /// Details about an agent update. /// [DataContract] public class TaskAgentUpdate { internal TaskAgentUpdate() { } private TaskAgentUpdate(TaskAgentUpdate agentUpdateToBeCloned) { this.CurrentState = agentUpdateToBeCloned.CurrentState; if (agentUpdateToBeCloned.SourceVersion != null) { this.SourceVersion = agentUpdateToBeCloned.SourceVersion.Clone(); } if (agentUpdateToBeCloned.TargetVersion != null) { this.TargetVersion = agentUpdateToBeCloned.TargetVersion.Clone(); } if (agentUpdateToBeCloned.RequestTime != null) { this.RequestTime = agentUpdateToBeCloned.RequestTime; } if (agentUpdateToBeCloned.RequestedBy != null) { this.RequestedBy = agentUpdateToBeCloned.RequestedBy.Clone(); } if (agentUpdateToBeCloned.Reason != null) { switch (agentUpdateToBeCloned.Reason.Code) { case TaskAgentUpdateReasonType.Manual: this.Reason = (agentUpdateToBeCloned.Reason as TaskAgentManualUpdate).Clone(); break; case TaskAgentUpdateReasonType.MinAgentVersionRequired: this.Reason = (agentUpdateToBeCloned.Reason as TaskAgentMinAgentVersionRequiredUpdate).Clone(); break; } } } /// /// Source agent version of the update. /// [DataMember] public PackageVersion SourceVersion { get; internal set; } /// /// Target agent version of the update. /// [DataMember] public PackageVersion TargetVersion { get; internal set; } /// /// Date on which this update was requested. /// [DataMember] public DateTime? RequestTime { get; internal set; } /// /// Identity which requested this update. /// [DataMember(EmitDefaultValue = false)] public IdentityRef RequestedBy { get; internal set; } /// /// Current state of this agent update. /// [DataMember(EmitDefaultValue = false)] public String CurrentState { get; set; } /// /// Reason for this update. /// [DataMember] public TaskAgentUpdateReason Reason { get; set; } public TaskAgentUpdate Clone() { return new TaskAgentUpdate(this); } } }