/*
 * 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 ec2-2016-11-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.EC2.Model
{
    /// 
    /// Describes a snapshot.
    /// 
    public partial class Snapshot
    {
        private string _dataEncryptionKeyId;
        private string _description;
        private bool? _encrypted;
        private string _kmsKeyId;
        private string _outpostArn;
        private string _ownerAlias;
        private string _ownerId;
        private string _progress;
        private DateTime? _restoreExpiryTime;
        private string _snapshotId;
        private SSEType _sseType;
        private DateTime? _startTime;
        private SnapshotState _state;
        private string _stateMessage;
        private StorageTier _storageTier;
        private List _tags = new List();
        private string _volumeId;
        private int? _volumeSize;
        /// 
        /// Gets and sets the property DataEncryptionKeyId. 
        /// 
        /// The data encryption key identifier for the snapshot. This value is a unique identifier
        /// that corresponds to the data encryption key that was used to encrypt the original
        /// volume or snapshot copy. Because data encryption keys are inherited by volumes created
        /// from snapshots, and vice versa, if snapshots share the same data encryption key identifier,
        /// then they belong to the same volume/snapshot lineage. This parameter is only returned
        /// by DescribeSnapshots.
        /// 
        /// 
        public string DataEncryptionKeyId
        {
            get { return this._dataEncryptionKeyId; }
            set { this._dataEncryptionKeyId = value; }
        }
        // Check to see if DataEncryptionKeyId property is set
        internal bool IsSetDataEncryptionKeyId()
        {
            return this._dataEncryptionKeyId != null;
        }
        /// 
        /// Gets and sets the property Description. 
        /// 
        /// The description for the snapshot.
        /// 
        /// 
        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 Encrypted. 
        /// 
        /// Indicates whether the snapshot is encrypted.
        /// 
        /// 
        public bool Encrypted
        {
            get { return this._encrypted.GetValueOrDefault(); }
            set { this._encrypted = value; }
        }
        // Check to see if Encrypted property is set
        internal bool IsSetEncrypted()
        {
            return this._encrypted.HasValue; 
        }
        /// 
        /// Gets and sets the property KmsKeyId. 
        /// 
        /// The Amazon Resource Name (ARN) of the Key Management Service (KMS) KMS key that was
        /// used to protect the volume encryption key for the parent volume.
        /// 
        /// 
        public string KmsKeyId
        {
            get { return this._kmsKeyId; }
            set { this._kmsKeyId = value; }
        }
        // Check to see if KmsKeyId property is set
        internal bool IsSetKmsKeyId()
        {
            return this._kmsKeyId != null;
        }
        /// 
        /// Gets and sets the property OutpostArn. 
        /// 
        /// The ARN of the Outpost on which the snapshot is stored. For more information, see
        /// Amazon
        /// EBS local snapshots on Outposts in the Amazon Elastic Compute Cloud User Guide.
        /// 
        /// 
        public string OutpostArn
        {
            get { return this._outpostArn; }
            set { this._outpostArn = value; }
        }
        // Check to see if OutpostArn property is set
        internal bool IsSetOutpostArn()
        {
            return this._outpostArn != null;
        }
        /// 
        /// Gets and sets the property OwnerAlias. 
        /// 
        /// The Amazon Web Services owner alias, from an Amazon-maintained list (amazon).
        /// This is not the user-configured Amazon Web Services account alias set using the IAM
        /// console.
        /// 
        /// 
        public string OwnerAlias
        {
            get { return this._ownerAlias; }
            set { this._ownerAlias = value; }
        }
        // Check to see if OwnerAlias property is set
        internal bool IsSetOwnerAlias()
        {
            return this._ownerAlias != null;
        }
        /// 
        /// Gets and sets the property OwnerId. 
        /// 
        /// The ID of the Amazon Web Services account that owns the EBS snapshot.
        /// 
        /// 
        public string OwnerId
        {
            get { return this._ownerId; }
            set { this._ownerId = value; }
        }
        // Check to see if OwnerId property is set
        internal bool IsSetOwnerId()
        {
            return this._ownerId != null;
        }
        /// 
        /// Gets and sets the property Progress. 
        /// 
        /// The progress of the snapshot, as a percentage.
        /// 
        /// 
        public string Progress
        {
            get { return this._progress; }
            set { this._progress = value; }
        }
        // Check to see if Progress property is set
        internal bool IsSetProgress()
        {
            return this._progress != null;
        }
        /// 
        /// Gets and sets the property RestoreExpiryTime. 
        /// 
        /// Only for archived snapshots that are temporarily restored. Indicates the date and
        /// time when a temporarily restored snapshot will be automatically re-archived.
        /// 
        /// 
        public DateTime RestoreExpiryTime
        {
            get { return this._restoreExpiryTime.GetValueOrDefault(); }
            set { this._restoreExpiryTime = value; }
        }
        // Check to see if RestoreExpiryTime property is set
        internal bool IsSetRestoreExpiryTime()
        {
            return this._restoreExpiryTime.HasValue; 
        }
        /// 
        /// Gets and sets the property SnapshotId. 
        /// 
        /// The ID of the snapshot. Each snapshot receives a unique identifier when it is created.
        /// 
        /// 
        public string SnapshotId
        {
            get { return this._snapshotId; }
            set { this._snapshotId = value; }
        }
        // Check to see if SnapshotId property is set
        internal bool IsSetSnapshotId()
        {
            return this._snapshotId != null;
        }
        /// 
        /// Gets and sets the property SseType. 
        /// 
        /// Reserved for future use.
        /// 
        /// 
        public SSEType SseType
        {
            get { return this._sseType; }
            set { this._sseType = value; }
        }
        // Check to see if SseType property is set
        internal bool IsSetSseType()
        {
            return this._sseType != null;
        }
        /// 
        /// Gets and sets the property StartTime. 
        /// 
        /// The time stamp when the snapshot was initiated.
        /// 
        /// 
        public DateTime StartTime
        {
            get { return this._startTime.GetValueOrDefault(); }
            set { this._startTime = value; }
        }
        // Check to see if StartTime property is set
        internal bool IsSetStartTime()
        {
            return this._startTime.HasValue; 
        }
        /// 
        /// Gets and sets the property State. 
        /// 
        /// The snapshot state.
        /// 
        /// 
        public SnapshotState State
        {
            get { return this._state; }
            set { this._state = value; }
        }
        // Check to see if State property is set
        internal bool IsSetState()
        {
            return this._state != null;
        }
        /// 
        /// Gets and sets the property StateMessage. 
        /// 
        /// Encrypted Amazon EBS snapshots are copied asynchronously. If a snapshot copy operation
        /// fails (for example, if the proper Key Management Service (KMS) permissions are not
        /// obtained) this field displays error state details to help you diagnose why the error
        /// occurred. This parameter is only returned by DescribeSnapshots.
        /// 
        /// 
        public string StateMessage
        {
            get { return this._stateMessage; }
            set { this._stateMessage = value; }
        }
        // Check to see if StateMessage property is set
        internal bool IsSetStateMessage()
        {
            return this._stateMessage != null;
        }
        /// 
        /// Gets and sets the property StorageTier. 
        /// 
        /// The storage tier in which the snapshot is stored. standard indicates
        /// that the snapshot is stored in the standard snapshot storage tier and that it is ready
        /// for use. archive indicates that the snapshot is currently archived and
        /// that it must be restored before it can be used.
        /// 
        /// 
        public StorageTier StorageTier
        {
            get { return this._storageTier; }
            set { this._storageTier = value; }
        }
        // Check to see if StorageTier property is set
        internal bool IsSetStorageTier()
        {
            return this._storageTier != null;
        }
        /// 
        /// Gets and sets the property Tags. 
        /// 
        /// Any tags assigned to the snapshot.
        /// 
        /// 
        public List Tags
        {
            get { return this._tags; }
            set { this._tags = value; }
        }
        // Check to see if Tags property is set
        internal bool IsSetTags()
        {
            return this._tags != null && this._tags.Count > 0; 
        }
        /// 
        /// Gets and sets the property VolumeId. 
        /// 
        /// The ID of the volume that was used to create the snapshot. Snapshots created by the
        /// CopySnapshot action have an arbitrary volume ID that should not be used for
        /// any purpose.
        /// 
        /// 
        public string VolumeId
        {
            get { return this._volumeId; }
            set { this._volumeId = value; }
        }
        // Check to see if VolumeId property is set
        internal bool IsSetVolumeId()
        {
            return this._volumeId != null;
        }
        /// 
        /// Gets and sets the property VolumeSize. 
        /// 
        /// The size of the volume, in GiB.
        /// 
        /// 
        public int VolumeSize
        {
            get { return this._volumeSize.GetValueOrDefault(); }
            set { this._volumeSize = value; }
        }
        // Check to see if VolumeSize property is set
        internal bool IsSetVolumeSize()
        {
            return this._volumeSize.HasValue; 
        }
    }
}