/*
 * 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 dlm-2018-01-12.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.DLM.Model
{
    /// 
    /// [Snapshot and AMI policies only] Specifies a cross-Region copy rule for snapshot
    /// and AMI policies.
    /// 
    ///   
    /// 
    /// To specify a cross-Region copy action for event-based polices, use CrossRegionCopyAction.
    /// 
    ///  
    /// 
    public partial class CrossRegionCopyRule
    {
        private string _cmkArn;
        private bool? _copyTags;
        private CrossRegionCopyDeprecateRule _deprecateRule;
        private bool? _encrypted;
        private CrossRegionCopyRetainRule _retainRule;
        private string _target;
        private string _targetRegion;
        /// 
        /// Gets and sets the property CmkArn. 
        /// 
        /// The Amazon Resource Name (ARN) of the KMS key to use for EBS encryption. If this parameter
        /// is not specified, the default KMS key for the account is used.
        /// 
        /// 
        [AWSProperty(Min=0, Max=2048)]
        public string CmkArn
        {
            get { return this._cmkArn; }
            set { this._cmkArn = value; }
        }
        // Check to see if CmkArn property is set
        internal bool IsSetCmkArn()
        {
            return this._cmkArn != null;
        }
        /// 
        /// Gets and sets the property CopyTags. 
        /// 
        /// Indicates whether to copy all user-defined tags from the source snapshot or AMI to
        /// the cross-Region copy.
        /// 
        /// 
        public bool CopyTags
        {
            get { return this._copyTags.GetValueOrDefault(); }
            set { this._copyTags = value; }
        }
        // Check to see if CopyTags property is set
        internal bool IsSetCopyTags()
        {
            return this._copyTags.HasValue; 
        }
        /// 
        /// Gets and sets the property DeprecateRule. 
        /// 
        ///  [AMI policies only] The AMI deprecation rule for cross-Region AMI copies created
        /// by the rule.
        /// 
        /// 
        public CrossRegionCopyDeprecateRule DeprecateRule
        {
            get { return this._deprecateRule; }
            set { this._deprecateRule = value; }
        }
        // Check to see if DeprecateRule property is set
        internal bool IsSetDeprecateRule()
        {
            return this._deprecateRule != null;
        }
        /// 
        /// Gets and sets the property Encrypted. 
        /// 
        /// To encrypt a copy of an unencrypted snapshot if encryption by default is not enabled,
        /// enable encryption using this parameter. Copies of encrypted snapshots are encrypted,
        /// even if this parameter is false or if encryption by default is not enabled.
        /// 
        /// 
        [AWSProperty(Required=true)]
        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 RetainRule. 
        /// 
        /// The retention rule that indicates how long the cross-Region snapshot or AMI copies
        /// are to be retained in the destination Region.
        /// 
        /// 
        public CrossRegionCopyRetainRule RetainRule
        {
            get { return this._retainRule; }
            set { this._retainRule = value; }
        }
        // Check to see if RetainRule property is set
        internal bool IsSetRetainRule()
        {
            return this._retainRule != null;
        }
        /// 
        /// Gets and sets the property Target. 
        /// 
        /// The target Region or the Amazon Resource Name (ARN) of the target Outpost for the
        /// snapshot copies.
        /// 
        ///  
        /// 
        /// Use this parameter instead of TargetRegion. Do not specify both.
        /// 
        /// 
        [AWSProperty(Min=0, Max=2048)]
        public string Target
        {
            get { return this._target; }
            set { this._target = value; }
        }
        // Check to see if Target property is set
        internal bool IsSetTarget()
        {
            return this._target != null;
        }
        /// 
        /// Gets and sets the property TargetRegion.  
        /// 
        /// Avoid using this parameter when creating new policies. Instead, use Target
        /// to specify a target Region or a target Outpost for snapshot copies.
        /// 
        ///  
        /// 
        /// For policies created before the Target parameter was introduced, this parameter
        /// indicates the target Region for snapshot copies.
        /// 
        ///  
        /// 
        [AWSProperty(Min=0, Max=16)]
        public string TargetRegion
        {
            get { return this._targetRegion; }
            set { this._targetRegion = value; }
        }
        // Check to see if TargetRegion property is set
        internal bool IsSetTargetRegion()
        {
            return this._targetRegion != null;
        }
    }
}