content: module Stratosphere.DynamoDB.GlobalTable.ReplicaSpecificationProperty (
          module Exports, ReplicaSpecificationProperty(..),
          mkReplicaSpecificationProperty
      ) where
  import qualified Data.Aeson as JSON
  import qualified Stratosphere.Prelude as Prelude
  import Stratosphere.Property
  import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.ContributorInsightsSpecificationProperty as Exports
  import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.KinesisStreamSpecificationProperty as Exports
  import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.PointInTimeRecoverySpecificationProperty as Exports
  import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.ReadOnDemandThroughputSettingsProperty as Exports
  import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.ReadProvisionedThroughputSettingsProperty as Exports
  import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.ReplicaGlobalSecondaryIndexSpecificationProperty as Exports
  import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.ReplicaSSESpecificationProperty as Exports
  import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.ReplicaStreamSpecificationProperty as Exports
  import {-# SOURCE #-} Stratosphere.DynamoDB.GlobalTable.ResourcePolicyProperty as Exports
  import Stratosphere.ResourceProperties
  import Stratosphere.Tag
  import Stratosphere.Value
  data ReplicaSpecificationProperty
    = ReplicaSpecificationProperty {contributorInsightsSpecification :: (Prelude.Maybe ContributorInsightsSpecificationProperty),
                                    deletionProtectionEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
                                    globalSecondaryIndexes :: (Prelude.Maybe [ReplicaGlobalSecondaryIndexSpecificationProperty]),
                                    kinesisStreamSpecification :: (Prelude.Maybe KinesisStreamSpecificationProperty),
                                    pointInTimeRecoverySpecification :: (Prelude.Maybe PointInTimeRecoverySpecificationProperty),
                                    readOnDemandThroughputSettings :: (Prelude.Maybe ReadOnDemandThroughputSettingsProperty),
                                    readProvisionedThroughputSettings :: (Prelude.Maybe ReadProvisionedThroughputSettingsProperty),
                                    region :: (Value Prelude.Text),
                                    replicaStreamSpecification :: (Prelude.Maybe ReplicaStreamSpecificationProperty),
                                    resourcePolicy :: (Prelude.Maybe ResourcePolicyProperty),
                                    sSESpecification :: (Prelude.Maybe ReplicaSSESpecificationProperty),
                                    tableClass :: (Prelude.Maybe (Value Prelude.Text)),
                                    tags :: (Prelude.Maybe [Tag])}
    deriving stock (Prelude.Eq, Prelude.Show)
  mkReplicaSpecificationProperty ::
    Value Prelude.Text -> ReplicaSpecificationProperty
  mkReplicaSpecificationProperty region
    = ReplicaSpecificationProperty
        {region = region,
         contributorInsightsSpecification = Prelude.Nothing,
         deletionProtectionEnabled = Prelude.Nothing,
         globalSecondaryIndexes = Prelude.Nothing,
         kinesisStreamSpecification = Prelude.Nothing,
         pointInTimeRecoverySpecification = Prelude.Nothing,
         readOnDemandThroughputSettings = Prelude.Nothing,
         readProvisionedThroughputSettings = Prelude.Nothing,
         replicaStreamSpecification = Prelude.Nothing,
         resourcePolicy = Prelude.Nothing,
         sSESpecification = Prelude.Nothing, tableClass = Prelude.Nothing,
         tags = Prelude.Nothing}
  instance ToResourceProperties ReplicaSpecificationProperty where
    toResourceProperties ReplicaSpecificationProperty {..}
      = ResourceProperties
          {awsType = "AWS::DynamoDB::GlobalTable.ReplicaSpecification",
           supportsTags = Prelude.True,
           properties = Prelude.fromList
                          ((Prelude.<>)
                             ["Region" JSON..= region]
                             (Prelude.catMaybes
                                [(JSON..=) "ContributorInsightsSpecification"
                                   Prelude.<$> contributorInsightsSpecification,
                                 (JSON..=) "DeletionProtectionEnabled"
                                   Prelude.<$> deletionProtectionEnabled,
                                 (JSON..=) "GlobalSecondaryIndexes"
                                   Prelude.<$> globalSecondaryIndexes,
                                 (JSON..=) "KinesisStreamSpecification"
                                   Prelude.<$> kinesisStreamSpecification,
                                 (JSON..=) "PointInTimeRecoverySpecification"
                                   Prelude.<$> pointInTimeRecoverySpecification,
                                 (JSON..=) "ReadOnDemandThroughputSettings"
                                   Prelude.<$> readOnDemandThroughputSettings,
                                 (JSON..=) "ReadProvisionedThroughputSettings"
                                   Prelude.<$> readProvisionedThroughputSettings,
                                 (JSON..=) "ReplicaStreamSpecification"
                                   Prelude.<$> replicaStreamSpecification,
                                 (JSON..=) "ResourcePolicy" Prelude.<$> resourcePolicy,
                                 (JSON..=) "SSESpecification" Prelude.<$> sSESpecification,
                                 (JSON..=) "TableClass" Prelude.<$> tableClass,
                                 (JSON..=) "Tags" Prelude.<$> tags]))}
  instance JSON.ToJSON ReplicaSpecificationProperty where
    toJSON ReplicaSpecificationProperty {..}
      = JSON.object
          (Prelude.fromList
             ((Prelude.<>)
                ["Region" JSON..= region]
                (Prelude.catMaybes
                   [(JSON..=) "ContributorInsightsSpecification"
                      Prelude.<$> contributorInsightsSpecification,
                    (JSON..=) "DeletionProtectionEnabled"
                      Prelude.<$> deletionProtectionEnabled,
                    (JSON..=) "GlobalSecondaryIndexes"
                      Prelude.<$> globalSecondaryIndexes,
                    (JSON..=) "KinesisStreamSpecification"
                      Prelude.<$> kinesisStreamSpecification,
                    (JSON..=) "PointInTimeRecoverySpecification"
                      Prelude.<$> pointInTimeRecoverySpecification,
                    (JSON..=) "ReadOnDemandThroughputSettings"
                      Prelude.<$> readOnDemandThroughputSettings,
                    (JSON..=) "ReadProvisionedThroughputSettings"
                      Prelude.<$> readProvisionedThroughputSettings,
                    (JSON..=) "ReplicaStreamSpecification"
                      Prelude.<$> replicaStreamSpecification,
                    (JSON..=) "ResourcePolicy" Prelude.<$> resourcePolicy,
                    (JSON..=) "SSESpecification" Prelude.<$> sSESpecification,
                    (JSON..=) "TableClass" Prelude.<$> tableClass,
                    (JSON..=) "Tags" Prelude.<$> tags])))
  instance Property "ContributorInsightsSpecification" ReplicaSpecificationProperty where
    type PropertyType "ContributorInsightsSpecification" ReplicaSpecificationProperty = ContributorInsightsSpecificationProperty
    set newValue ReplicaSpecificationProperty {..}
      = ReplicaSpecificationProperty
          {contributorInsightsSpecification = Prelude.pure newValue, ..}
  instance Property "DeletionProtectionEnabled" ReplicaSpecificationProperty where
    type PropertyType "DeletionProtectionEnabled" ReplicaSpecificationProperty = Value Prelude.Bool
    set newValue ReplicaSpecificationProperty {..}
      = ReplicaSpecificationProperty
          {deletionProtectionEnabled = Prelude.pure newValue, ..}
  instance Property "GlobalSecondaryIndexes" ReplicaSpecificationProperty where
    type PropertyType "GlobalSecondaryIndexes" ReplicaSpecificationProperty = [ReplicaGlobalSecondaryIndexSpecificationProperty]
    set newValue ReplicaSpecificationProperty {..}
      = ReplicaSpecificationProperty
          {globalSecondaryIndexes = Prelude.pure newValue, ..}
  instance Property "KinesisStreamSpecification" ReplicaSpecificationProperty where
    type PropertyType "KinesisStreamSpecification" ReplicaSpecificationProperty = KinesisStreamSpecificationProperty
    set newValue ReplicaSpecificationProperty {..}
      = ReplicaSpecificationProperty
          {kinesisStreamSpecification = Prelude.pure newValue, ..}
  instance Property "PointInTimeRecoverySpecification" ReplicaSpecificationProperty where
    type PropertyType "PointInTimeRecoverySpecification" ReplicaSpecificationProperty = PointInTimeRecoverySpecificationProperty
    set newValue ReplicaSpecificationProperty {..}
      = ReplicaSpecificationProperty
          {pointInTimeRecoverySpecification = Prelude.pure newValue, ..}
  instance Property "ReadOnDemandThroughputSettings" ReplicaSpecificationProperty where
    type PropertyType "ReadOnDemandThroughputSettings" ReplicaSpecificationProperty = ReadOnDemandThroughputSettingsProperty
    set newValue ReplicaSpecificationProperty {..}
      = ReplicaSpecificationProperty
          {readOnDemandThroughputSettings = Prelude.pure newValue, ..}
  instance Property "ReadProvisionedThroughputSettings" ReplicaSpecificationProperty where
    type PropertyType "ReadProvisionedThroughputSettings" ReplicaSpecificationProperty = ReadProvisionedThroughputSettingsProperty
    set newValue ReplicaSpecificationProperty {..}
      = ReplicaSpecificationProperty
          {readProvisionedThroughputSettings = Prelude.pure newValue, ..}
  instance Property "Region" ReplicaSpecificationProperty where
    type PropertyType "Region" ReplicaSpecificationProperty = Value Prelude.Text
    set newValue ReplicaSpecificationProperty {..}
      = ReplicaSpecificationProperty {region = newValue, ..}
  instance Property "ReplicaStreamSpecification" ReplicaSpecificationProperty where
    type PropertyType "ReplicaStreamSpecification" ReplicaSpecificationProperty = ReplicaStreamSpecificationProperty
    set newValue ReplicaSpecificationProperty {..}
      = ReplicaSpecificationProperty
          {replicaStreamSpecification = Prelude.pure newValue, ..}
  instance Property "ResourcePolicy" ReplicaSpecificationProperty where
    type PropertyType "ResourcePolicy" ReplicaSpecificationProperty = ResourcePolicyProperty
    set newValue ReplicaSpecificationProperty {..}
      = ReplicaSpecificationProperty
          {resourcePolicy = Prelude.pure newValue, ..}
  instance Property "SSESpecification" ReplicaSpecificationProperty where
    type PropertyType "SSESpecification" ReplicaSpecificationProperty = ReplicaSSESpecificationProperty
    set newValue ReplicaSpecificationProperty {..}
      = ReplicaSpecificationProperty
          {sSESpecification = Prelude.pure newValue, ..}
  instance Property "TableClass" ReplicaSpecificationProperty where
    type PropertyType "TableClass" ReplicaSpecificationProperty = Value Prelude.Text
    set newValue ReplicaSpecificationProperty {..}
      = ReplicaSpecificationProperty
          {tableClass = Prelude.pure newValue, ..}
  instance Property "Tags" ReplicaSpecificationProperty where
    type PropertyType "Tags" ReplicaSpecificationProperty = [Tag]
    set newValue ReplicaSpecificationProperty {..}
      = ReplicaSpecificationProperty {tags = Prelude.pure newValue, ..}