/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 * 
 *  http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
/*
 * Do not modify this file. This file is generated from the states-2016-11-23.normal.json service model.
 */
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using System.Net;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.StepFunctions.Model
{
    /// 
    /// Contains details about the events of an execution.
    /// 
    public partial class HistoryEvent
    {
        private ActivityFailedEventDetails _activityFailedEventDetails;
        private ActivityScheduledEventDetails _activityScheduledEventDetails;
        private ActivityScheduleFailedEventDetails _activityScheduleFailedEventDetails;
        private ActivityStartedEventDetails _activityStartedEventDetails;
        private ActivitySucceededEventDetails _activitySucceededEventDetails;
        private ActivityTimedOutEventDetails _activityTimedOutEventDetails;
        private ExecutionAbortedEventDetails _executionAbortedEventDetails;
        private ExecutionFailedEventDetails _executionFailedEventDetails;
        private ExecutionStartedEventDetails _executionStartedEventDetails;
        private ExecutionSucceededEventDetails _executionSucceededEventDetails;
        private ExecutionTimedOutEventDetails _executionTimedOutEventDetails;
        private long? _id;
        private LambdaFunctionFailedEventDetails _lambdaFunctionFailedEventDetails;
        private LambdaFunctionScheduledEventDetails _lambdaFunctionScheduledEventDetails;
        private LambdaFunctionScheduleFailedEventDetails _lambdaFunctionScheduleFailedEventDetails;
        private LambdaFunctionStartFailedEventDetails _lambdaFunctionStartFailedEventDetails;
        private LambdaFunctionSucceededEventDetails _lambdaFunctionSucceededEventDetails;
        private LambdaFunctionTimedOutEventDetails _lambdaFunctionTimedOutEventDetails;
        private MapIterationEventDetails _mapIterationAbortedEventDetails;
        private MapIterationEventDetails _mapIterationFailedEventDetails;
        private MapIterationEventDetails _mapIterationStartedEventDetails;
        private MapIterationEventDetails _mapIterationSucceededEventDetails;
        private MapRunFailedEventDetails _mapRunFailedEventDetails;
        private MapRunStartedEventDetails _mapRunStartedEventDetails;
        private MapStateStartedEventDetails _mapStateStartedEventDetails;
        private long? _previousEventId;
        private StateEnteredEventDetails _stateEnteredEventDetails;
        private StateExitedEventDetails _stateExitedEventDetails;
        private TaskFailedEventDetails _taskFailedEventDetails;
        private TaskScheduledEventDetails _taskScheduledEventDetails;
        private TaskStartedEventDetails _taskStartedEventDetails;
        private TaskStartFailedEventDetails _taskStartFailedEventDetails;
        private TaskSubmitFailedEventDetails _taskSubmitFailedEventDetails;
        private TaskSubmittedEventDetails _taskSubmittedEventDetails;
        private TaskSucceededEventDetails _taskSucceededEventDetails;
        private TaskTimedOutEventDetails _taskTimedOutEventDetails;
        private DateTime? _timestamp;
        private HistoryEventType _type;
        /// 
        /// Gets and sets the property ActivityFailedEventDetails.
        /// 
        public ActivityFailedEventDetails ActivityFailedEventDetails
        {
            get { return this._activityFailedEventDetails; }
            set { this._activityFailedEventDetails = value; }
        }
        // Check to see if ActivityFailedEventDetails property is set
        internal bool IsSetActivityFailedEventDetails()
        {
            return this._activityFailedEventDetails != null;
        }
        /// 
        /// Gets and sets the property ActivityScheduledEventDetails.
        /// 
        public ActivityScheduledEventDetails ActivityScheduledEventDetails
        {
            get { return this._activityScheduledEventDetails; }
            set { this._activityScheduledEventDetails = value; }
        }
        // Check to see if ActivityScheduledEventDetails property is set
        internal bool IsSetActivityScheduledEventDetails()
        {
            return this._activityScheduledEventDetails != null;
        }
        /// 
        /// Gets and sets the property ActivityScheduleFailedEventDetails. 
        /// 
        /// Contains details about an activity schedule event that failed during an execution.
        /// 
        /// 
        public ActivityScheduleFailedEventDetails ActivityScheduleFailedEventDetails
        {
            get { return this._activityScheduleFailedEventDetails; }
            set { this._activityScheduleFailedEventDetails = value; }
        }
        // Check to see if ActivityScheduleFailedEventDetails property is set
        internal bool IsSetActivityScheduleFailedEventDetails()
        {
            return this._activityScheduleFailedEventDetails != null;
        }
        /// 
        /// Gets and sets the property ActivityStartedEventDetails.
        /// 
        public ActivityStartedEventDetails ActivityStartedEventDetails
        {
            get { return this._activityStartedEventDetails; }
            set { this._activityStartedEventDetails = value; }
        }
        // Check to see if ActivityStartedEventDetails property is set
        internal bool IsSetActivityStartedEventDetails()
        {
            return this._activityStartedEventDetails != null;
        }
        /// 
        /// Gets and sets the property ActivitySucceededEventDetails.
        /// 
        public ActivitySucceededEventDetails ActivitySucceededEventDetails
        {
            get { return this._activitySucceededEventDetails; }
            set { this._activitySucceededEventDetails = value; }
        }
        // Check to see if ActivitySucceededEventDetails property is set
        internal bool IsSetActivitySucceededEventDetails()
        {
            return this._activitySucceededEventDetails != null;
        }
        /// 
        /// Gets and sets the property ActivityTimedOutEventDetails.
        /// 
        public ActivityTimedOutEventDetails ActivityTimedOutEventDetails
        {
            get { return this._activityTimedOutEventDetails; }
            set { this._activityTimedOutEventDetails = value; }
        }
        // Check to see if ActivityTimedOutEventDetails property is set
        internal bool IsSetActivityTimedOutEventDetails()
        {
            return this._activityTimedOutEventDetails != null;
        }
        /// 
        /// Gets and sets the property ExecutionAbortedEventDetails.
        /// 
        public ExecutionAbortedEventDetails ExecutionAbortedEventDetails
        {
            get { return this._executionAbortedEventDetails; }
            set { this._executionAbortedEventDetails = value; }
        }
        // Check to see if ExecutionAbortedEventDetails property is set
        internal bool IsSetExecutionAbortedEventDetails()
        {
            return this._executionAbortedEventDetails != null;
        }
        /// 
        /// Gets and sets the property ExecutionFailedEventDetails.
        /// 
        public ExecutionFailedEventDetails ExecutionFailedEventDetails
        {
            get { return this._executionFailedEventDetails; }
            set { this._executionFailedEventDetails = value; }
        }
        // Check to see if ExecutionFailedEventDetails property is set
        internal bool IsSetExecutionFailedEventDetails()
        {
            return this._executionFailedEventDetails != null;
        }
        /// 
        /// Gets and sets the property ExecutionStartedEventDetails.
        /// 
        public ExecutionStartedEventDetails ExecutionStartedEventDetails
        {
            get { return this._executionStartedEventDetails; }
            set { this._executionStartedEventDetails = value; }
        }
        // Check to see if ExecutionStartedEventDetails property is set
        internal bool IsSetExecutionStartedEventDetails()
        {
            return this._executionStartedEventDetails != null;
        }
        /// 
        /// Gets and sets the property ExecutionSucceededEventDetails.
        /// 
        public ExecutionSucceededEventDetails ExecutionSucceededEventDetails
        {
            get { return this._executionSucceededEventDetails; }
            set { this._executionSucceededEventDetails = value; }
        }
        // Check to see if ExecutionSucceededEventDetails property is set
        internal bool IsSetExecutionSucceededEventDetails()
        {
            return this._executionSucceededEventDetails != null;
        }
        /// 
        /// Gets and sets the property ExecutionTimedOutEventDetails.
        /// 
        public ExecutionTimedOutEventDetails ExecutionTimedOutEventDetails
        {
            get { return this._executionTimedOutEventDetails; }
            set { this._executionTimedOutEventDetails = value; }
        }
        // Check to see if ExecutionTimedOutEventDetails property is set
        internal bool IsSetExecutionTimedOutEventDetails()
        {
            return this._executionTimedOutEventDetails != null;
        }
        /// 
        /// Gets and sets the property Id. 
        /// 
        /// The id of the event. Events are numbered sequentially, starting at one.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public long Id
        {
            get { return this._id.GetValueOrDefault(); }
            set { this._id = value; }
        }
        // Check to see if Id property is set
        internal bool IsSetId()
        {
            return this._id.HasValue; 
        }
        /// 
        /// Gets and sets the property LambdaFunctionFailedEventDetails.
        /// 
        public LambdaFunctionFailedEventDetails LambdaFunctionFailedEventDetails
        {
            get { return this._lambdaFunctionFailedEventDetails; }
            set { this._lambdaFunctionFailedEventDetails = value; }
        }
        // Check to see if LambdaFunctionFailedEventDetails property is set
        internal bool IsSetLambdaFunctionFailedEventDetails()
        {
            return this._lambdaFunctionFailedEventDetails != null;
        }
        /// 
        /// Gets and sets the property LambdaFunctionScheduledEventDetails.
        /// 
        public LambdaFunctionScheduledEventDetails LambdaFunctionScheduledEventDetails
        {
            get { return this._lambdaFunctionScheduledEventDetails; }
            set { this._lambdaFunctionScheduledEventDetails = value; }
        }
        // Check to see if LambdaFunctionScheduledEventDetails property is set
        internal bool IsSetLambdaFunctionScheduledEventDetails()
        {
            return this._lambdaFunctionScheduledEventDetails != null;
        }
        /// 
        /// Gets and sets the property LambdaFunctionScheduleFailedEventDetails.
        /// 
        public LambdaFunctionScheduleFailedEventDetails LambdaFunctionScheduleFailedEventDetails
        {
            get { return this._lambdaFunctionScheduleFailedEventDetails; }
            set { this._lambdaFunctionScheduleFailedEventDetails = value; }
        }
        // Check to see if LambdaFunctionScheduleFailedEventDetails property is set
        internal bool IsSetLambdaFunctionScheduleFailedEventDetails()
        {
            return this._lambdaFunctionScheduleFailedEventDetails != null;
        }
        /// 
        /// Gets and sets the property LambdaFunctionStartFailedEventDetails. 
        /// 
        /// Contains details about a lambda function that failed to start during an execution.
        /// 
        /// 
        public LambdaFunctionStartFailedEventDetails LambdaFunctionStartFailedEventDetails
        {
            get { return this._lambdaFunctionStartFailedEventDetails; }
            set { this._lambdaFunctionStartFailedEventDetails = value; }
        }
        // Check to see if LambdaFunctionStartFailedEventDetails property is set
        internal bool IsSetLambdaFunctionStartFailedEventDetails()
        {
            return this._lambdaFunctionStartFailedEventDetails != null;
        }
        /// 
        /// Gets and sets the property LambdaFunctionSucceededEventDetails. 
        /// 
        /// Contains details about a Lambda function that terminated successfully during an execution.
        /// 
        /// 
        public LambdaFunctionSucceededEventDetails LambdaFunctionSucceededEventDetails
        {
            get { return this._lambdaFunctionSucceededEventDetails; }
            set { this._lambdaFunctionSucceededEventDetails = value; }
        }
        // Check to see if LambdaFunctionSucceededEventDetails property is set
        internal bool IsSetLambdaFunctionSucceededEventDetails()
        {
            return this._lambdaFunctionSucceededEventDetails != null;
        }
        /// 
        /// Gets and sets the property LambdaFunctionTimedOutEventDetails.
        /// 
        public LambdaFunctionTimedOutEventDetails LambdaFunctionTimedOutEventDetails
        {
            get { return this._lambdaFunctionTimedOutEventDetails; }
            set { this._lambdaFunctionTimedOutEventDetails = value; }
        }
        // Check to see if LambdaFunctionTimedOutEventDetails property is set
        internal bool IsSetLambdaFunctionTimedOutEventDetails()
        {
            return this._lambdaFunctionTimedOutEventDetails != null;
        }
        /// 
        /// Gets and sets the property MapIterationAbortedEventDetails. 
        /// 
        /// Contains details about an iteration of a Map state that was aborted.
        /// 
        /// 
        public MapIterationEventDetails MapIterationAbortedEventDetails
        {
            get { return this._mapIterationAbortedEventDetails; }
            set { this._mapIterationAbortedEventDetails = value; }
        }
        // Check to see if MapIterationAbortedEventDetails property is set
        internal bool IsSetMapIterationAbortedEventDetails()
        {
            return this._mapIterationAbortedEventDetails != null;
        }
        /// 
        /// Gets and sets the property MapIterationFailedEventDetails. 
        /// 
        /// Contains details about an iteration of a Map state that failed.
        /// 
        /// 
        public MapIterationEventDetails MapIterationFailedEventDetails
        {
            get { return this._mapIterationFailedEventDetails; }
            set { this._mapIterationFailedEventDetails = value; }
        }
        // Check to see if MapIterationFailedEventDetails property is set
        internal bool IsSetMapIterationFailedEventDetails()
        {
            return this._mapIterationFailedEventDetails != null;
        }
        /// 
        /// Gets and sets the property MapIterationStartedEventDetails. 
        /// 
        /// Contains details about an iteration of a Map state that was started.
        /// 
        /// 
        public MapIterationEventDetails MapIterationStartedEventDetails
        {
            get { return this._mapIterationStartedEventDetails; }
            set { this._mapIterationStartedEventDetails = value; }
        }
        // Check to see if MapIterationStartedEventDetails property is set
        internal bool IsSetMapIterationStartedEventDetails()
        {
            return this._mapIterationStartedEventDetails != null;
        }
        /// 
        /// Gets and sets the property MapIterationSucceededEventDetails. 
        /// 
        /// Contains details about an iteration of a Map state that succeeded.
        /// 
        /// 
        public MapIterationEventDetails MapIterationSucceededEventDetails
        {
            get { return this._mapIterationSucceededEventDetails; }
            set { this._mapIterationSucceededEventDetails = value; }
        }
        // Check to see if MapIterationSucceededEventDetails property is set
        internal bool IsSetMapIterationSucceededEventDetails()
        {
            return this._mapIterationSucceededEventDetails != null;
        }
        /// 
        /// Gets and sets the property MapRunFailedEventDetails. 
        /// 
        /// Contains error and cause details about a Map Run that failed.
        /// 
        /// 
        public MapRunFailedEventDetails MapRunFailedEventDetails
        {
            get { return this._mapRunFailedEventDetails; }
            set { this._mapRunFailedEventDetails = value; }
        }
        // Check to see if MapRunFailedEventDetails property is set
        internal bool IsSetMapRunFailedEventDetails()
        {
            return this._mapRunFailedEventDetails != null;
        }
        /// 
        /// Gets and sets the property MapRunStartedEventDetails. 
        /// 
        /// Contains details, such as mapRunArn, and the start date and time of a
        /// Map Run. mapRunArn is the Amazon Resource Name (ARN) of the Map Run that
        /// was started.
        /// 
        /// 
        public MapRunStartedEventDetails MapRunStartedEventDetails
        {
            get { return this._mapRunStartedEventDetails; }
            set { this._mapRunStartedEventDetails = value; }
        }
        // Check to see if MapRunStartedEventDetails property is set
        internal bool IsSetMapRunStartedEventDetails()
        {
            return this._mapRunStartedEventDetails != null;
        }
        /// 
        /// Gets and sets the property MapStateStartedEventDetails. 
        /// 
        /// Contains details about Map state that was started.
        /// 
        /// 
        public MapStateStartedEventDetails MapStateStartedEventDetails
        {
            get { return this._mapStateStartedEventDetails; }
            set { this._mapStateStartedEventDetails = value; }
        }
        // Check to see if MapStateStartedEventDetails property is set
        internal bool IsSetMapStateStartedEventDetails()
        {
            return this._mapStateStartedEventDetails != null;
        }
        /// 
        /// Gets and sets the property PreviousEventId. 
        /// 
        /// The id of the previous event.
        /// 
        /// 
        public long PreviousEventId
        {
            get { return this._previousEventId.GetValueOrDefault(); }
            set { this._previousEventId = value; }
        }
        // Check to see if PreviousEventId property is set
        internal bool IsSetPreviousEventId()
        {
            return this._previousEventId.HasValue; 
        }
        /// 
        /// Gets and sets the property StateEnteredEventDetails.
        /// 
        public StateEnteredEventDetails StateEnteredEventDetails
        {
            get { return this._stateEnteredEventDetails; }
            set { this._stateEnteredEventDetails = value; }
        }
        // Check to see if StateEnteredEventDetails property is set
        internal bool IsSetStateEnteredEventDetails()
        {
            return this._stateEnteredEventDetails != null;
        }
        /// 
        /// Gets and sets the property StateExitedEventDetails.
        /// 
        public StateExitedEventDetails StateExitedEventDetails
        {
            get { return this._stateExitedEventDetails; }
            set { this._stateExitedEventDetails = value; }
        }
        // Check to see if StateExitedEventDetails property is set
        internal bool IsSetStateExitedEventDetails()
        {
            return this._stateExitedEventDetails != null;
        }
        /// 
        /// Gets and sets the property TaskFailedEventDetails. 
        /// 
        /// Contains details about the failure of a task.
        /// 
        /// 
        public TaskFailedEventDetails TaskFailedEventDetails
        {
            get { return this._taskFailedEventDetails; }
            set { this._taskFailedEventDetails = value; }
        }
        // Check to see if TaskFailedEventDetails property is set
        internal bool IsSetTaskFailedEventDetails()
        {
            return this._taskFailedEventDetails != null;
        }
        /// 
        /// Gets and sets the property TaskScheduledEventDetails. 
        /// 
        /// Contains details about a task that was scheduled.
        /// 
        /// 
        public TaskScheduledEventDetails TaskScheduledEventDetails
        {
            get { return this._taskScheduledEventDetails; }
            set { this._taskScheduledEventDetails = value; }
        }
        // Check to see if TaskScheduledEventDetails property is set
        internal bool IsSetTaskScheduledEventDetails()
        {
            return this._taskScheduledEventDetails != null;
        }
        /// 
        /// Gets and sets the property TaskStartedEventDetails. 
        /// 
        /// Contains details about a task that was started.
        /// 
        /// 
        public TaskStartedEventDetails TaskStartedEventDetails
        {
            get { return this._taskStartedEventDetails; }
            set { this._taskStartedEventDetails = value; }
        }
        // Check to see if TaskStartedEventDetails property is set
        internal bool IsSetTaskStartedEventDetails()
        {
            return this._taskStartedEventDetails != null;
        }
        /// 
        /// Gets and sets the property TaskStartFailedEventDetails. 
        /// 
        /// Contains details about a task that failed to start.
        /// 
        /// 
        public TaskStartFailedEventDetails TaskStartFailedEventDetails
        {
            get { return this._taskStartFailedEventDetails; }
            set { this._taskStartFailedEventDetails = value; }
        }
        // Check to see if TaskStartFailedEventDetails property is set
        internal bool IsSetTaskStartFailedEventDetails()
        {
            return this._taskStartFailedEventDetails != null;
        }
        /// 
        /// Gets and sets the property TaskSubmitFailedEventDetails. 
        /// 
        /// Contains details about a task that where the submit failed.
        /// 
        /// 
        public TaskSubmitFailedEventDetails TaskSubmitFailedEventDetails
        {
            get { return this._taskSubmitFailedEventDetails; }
            set { this._taskSubmitFailedEventDetails = value; }
        }
        // Check to see if TaskSubmitFailedEventDetails property is set
        internal bool IsSetTaskSubmitFailedEventDetails()
        {
            return this._taskSubmitFailedEventDetails != null;
        }
        /// 
        /// Gets and sets the property TaskSubmittedEventDetails. 
        /// 
        /// Contains details about a submitted task.
        /// 
        /// 
        public TaskSubmittedEventDetails TaskSubmittedEventDetails
        {
            get { return this._taskSubmittedEventDetails; }
            set { this._taskSubmittedEventDetails = value; }
        }
        // Check to see if TaskSubmittedEventDetails property is set
        internal bool IsSetTaskSubmittedEventDetails()
        {
            return this._taskSubmittedEventDetails != null;
        }
        /// 
        /// Gets and sets the property TaskSucceededEventDetails. 
        /// 
        /// Contains details about a task that succeeded.
        /// 
        /// 
        public TaskSucceededEventDetails TaskSucceededEventDetails
        {
            get { return this._taskSucceededEventDetails; }
            set { this._taskSucceededEventDetails = value; }
        }
        // Check to see if TaskSucceededEventDetails property is set
        internal bool IsSetTaskSucceededEventDetails()
        {
            return this._taskSucceededEventDetails != null;
        }
        /// 
        /// Gets and sets the property TaskTimedOutEventDetails. 
        /// 
        /// Contains details about a task that timed out.
        /// 
        /// 
        public TaskTimedOutEventDetails TaskTimedOutEventDetails
        {
            get { return this._taskTimedOutEventDetails; }
            set { this._taskTimedOutEventDetails = value; }
        }
        // Check to see if TaskTimedOutEventDetails property is set
        internal bool IsSetTaskTimedOutEventDetails()
        {
            return this._taskTimedOutEventDetails != null;
        }
        /// 
        /// Gets and sets the property Timestamp. 
        /// 
        /// The date and time the event occurred.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public DateTime Timestamp
        {
            get { return this._timestamp.GetValueOrDefault(); }
            set { this._timestamp = value; }
        }
        // Check to see if Timestamp property is set
        internal bool IsSetTimestamp()
        {
            return this._timestamp.HasValue; 
        }
        /// 
        /// Gets and sets the property Type. 
        /// 
        /// The type of the event.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public HistoryEventType Type
        {
            get { return this._type; }
            set { this._type = value; }
        }
        // Check to see if Type property is set
        internal bool IsSetType()
        {
            return this._type != null;
        }
    }
}