/*
 * 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 cloudformation-2010-05-15.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.CloudFormation.Model
{
    /// 
    /// The StackResource data type.
    /// 
    public partial class StackResource
    {
        private string _description;
        private StackResourceDriftInformation _driftInformation;
        private string _logicalResourceId;
        private ModuleInfo _moduleInfo;
        private string _physicalResourceId;
        private ResourceStatus _resourceStatus;
        private string _resourceStatusReason;
        private string _resourceType;
        private string _stackId;
        private string _stackName;
        private DateTime? _timestamp;
        /// 
        /// Gets and sets the property Description. 
        /// 
        /// User defined description associated with the resource.
        /// 
        /// 
        [AWSProperty(Min=1, Max=1024)]
        public string Description
        {
            get { return this._description; }
            set { this._description = value; }
        }
        // Check to see if Description property is set
        internal bool IsSetDescription()
        {
            return this._description != null;
        }
        /// 
        /// Gets and sets the property DriftInformation. 
        /// 
        /// Information about whether the resource's actual configuration differs, or has drifted,
        /// from its expected configuration, as defined in the stack template and any values specified
        /// as template parameters. For more information, see Detecting
        /// Unregulated Configuration Changes to Stacks and Resources.
        /// 
        /// 
        public StackResourceDriftInformation DriftInformation
        {
            get { return this._driftInformation; }
            set { this._driftInformation = value; }
        }
        // Check to see if DriftInformation property is set
        internal bool IsSetDriftInformation()
        {
            return this._driftInformation != null;
        }
        /// 
        /// Gets and sets the property LogicalResourceId. 
        /// 
        /// The logical name of the resource specified in the template.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public string LogicalResourceId
        {
            get { return this._logicalResourceId; }
            set { this._logicalResourceId = value; }
        }
        // Check to see if LogicalResourceId property is set
        internal bool IsSetLogicalResourceId()
        {
            return this._logicalResourceId != null;
        }
        /// 
        /// Gets and sets the property ModuleInfo. 
        /// 
        /// Contains information about the module from which the resource was created, if the
        /// resource was created from a module included in the stack template.
        /// 
        /// 
        public ModuleInfo ModuleInfo
        {
            get { return this._moduleInfo; }
            set { this._moduleInfo = value; }
        }
        // Check to see if ModuleInfo property is set
        internal bool IsSetModuleInfo()
        {
            return this._moduleInfo != null;
        }
        /// 
        /// Gets and sets the property PhysicalResourceId. 
        /// 
        /// The name or unique identifier that corresponds to a physical instance ID of a resource
        /// supported by CloudFormation.
        /// 
        /// 
        public string PhysicalResourceId
        {
            get { return this._physicalResourceId; }
            set { this._physicalResourceId = value; }
        }
        // Check to see if PhysicalResourceId property is set
        internal bool IsSetPhysicalResourceId()
        {
            return this._physicalResourceId != null;
        }
        /// 
        /// Gets and sets the property ResourceStatus. 
        /// 
        /// Current status of the resource.
        /// 
        /// 
        [AWSProperty(Required=true)]
        public ResourceStatus ResourceStatus
        {
            get { return this._resourceStatus; }
            set { this._resourceStatus = value; }
        }
        // Check to see if ResourceStatus property is set
        internal bool IsSetResourceStatus()
        {
            return this._resourceStatus != null;
        }
        /// 
        /// Gets and sets the property ResourceStatusReason. 
        /// 
        /// Success/failure message associated with the resource.
        /// 
        /// 
        public string ResourceStatusReason
        {
            get { return this._resourceStatusReason; }
            set { this._resourceStatusReason = value; }
        }
        // Check to see if ResourceStatusReason property is set
        internal bool IsSetResourceStatusReason()
        {
            return this._resourceStatusReason != null;
        }
        /// 
        /// Gets and sets the property ResourceType. 
        /// 
        /// Type of resource. For more information, go to Amazon
        /// Web Services Resource Types Reference in the CloudFormation User Guide.
        /// 
        /// 
        [AWSProperty(Required=true, Min=1, Max=256)]
        public string ResourceType
        {
            get { return this._resourceType; }
            set { this._resourceType = value; }
        }
        // Check to see if ResourceType property is set
        internal bool IsSetResourceType()
        {
            return this._resourceType != null;
        }
        /// 
        /// Gets and sets the property StackId. 
        /// 
        /// Unique identifier of the stack.
        /// 
        /// 
        public string StackId
        {
            get { return this._stackId; }
            set { this._stackId = value; }
        }
        // Check to see if StackId property is set
        internal bool IsSetStackId()
        {
            return this._stackId != null;
        }
        /// 
        /// Gets and sets the property StackName. 
        /// 
        /// The name associated with the stack.
        /// 
        /// 
        public string StackName
        {
            get { return this._stackName; }
            set { this._stackName = value; }
        }
        // Check to see if StackName property is set
        internal bool IsSetStackName()
        {
            return this._stackName != null;
        }
        /// 
        /// Gets and sets the property Timestamp. 
        /// 
        /// Time the status was updated.
        /// 
        /// 
        [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; 
        }
    }
}