{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.DynamoDB.Types.AutoScalingSettingsUpdate
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.DynamoDB.Types.AutoScalingSettingsUpdate where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.DynamoDB.Types.AttributeValue
import Amazonka.DynamoDB.Types.AutoScalingPolicyUpdate
import Amazonka.DynamoDB.Types.WriteRequest
import qualified Amazonka.Prelude as Prelude

-- | Represents the auto scaling settings to be modified for a global table
-- or global secondary index.
--
-- /See:/ 'newAutoScalingSettingsUpdate' smart constructor.
data AutoScalingSettingsUpdate = AutoScalingSettingsUpdate'
  { -- | Disabled auto scaling for this global table or global secondary index.
    AutoScalingSettingsUpdate -> Maybe Bool
autoScalingDisabled :: Prelude.Maybe Prelude.Bool,
    -- | Role ARN used for configuring auto scaling policy.
    AutoScalingSettingsUpdate -> Maybe Text
autoScalingRoleArn :: Prelude.Maybe Prelude.Text,
    -- | The maximum capacity units that a global table or global secondary index
    -- should be scaled up to.
    AutoScalingSettingsUpdate -> Maybe Natural
maximumUnits :: Prelude.Maybe Prelude.Natural,
    -- | The minimum capacity units that a global table or global secondary index
    -- should be scaled down to.
    AutoScalingSettingsUpdate -> Maybe Natural
minimumUnits :: Prelude.Maybe Prelude.Natural,
    -- | The scaling policy to apply for scaling target global table or global
    -- secondary index capacity units.
    AutoScalingSettingsUpdate -> Maybe AutoScalingPolicyUpdate
scalingPolicyUpdate :: Prelude.Maybe AutoScalingPolicyUpdate
  }
  deriving (AutoScalingSettingsUpdate -> AutoScalingSettingsUpdate -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AutoScalingSettingsUpdate -> AutoScalingSettingsUpdate -> Bool
$c/= :: AutoScalingSettingsUpdate -> AutoScalingSettingsUpdate -> Bool
== :: AutoScalingSettingsUpdate -> AutoScalingSettingsUpdate -> Bool
$c== :: AutoScalingSettingsUpdate -> AutoScalingSettingsUpdate -> Bool
Prelude.Eq, ReadPrec [AutoScalingSettingsUpdate]
ReadPrec AutoScalingSettingsUpdate
Int -> ReadS AutoScalingSettingsUpdate
ReadS [AutoScalingSettingsUpdate]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [AutoScalingSettingsUpdate]
$creadListPrec :: ReadPrec [AutoScalingSettingsUpdate]
readPrec :: ReadPrec AutoScalingSettingsUpdate
$creadPrec :: ReadPrec AutoScalingSettingsUpdate
readList :: ReadS [AutoScalingSettingsUpdate]
$creadList :: ReadS [AutoScalingSettingsUpdate]
readsPrec :: Int -> ReadS AutoScalingSettingsUpdate
$creadsPrec :: Int -> ReadS AutoScalingSettingsUpdate
Prelude.Read, Int -> AutoScalingSettingsUpdate -> ShowS
[AutoScalingSettingsUpdate] -> ShowS
AutoScalingSettingsUpdate -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AutoScalingSettingsUpdate] -> ShowS
$cshowList :: [AutoScalingSettingsUpdate] -> ShowS
show :: AutoScalingSettingsUpdate -> String
$cshow :: AutoScalingSettingsUpdate -> String
showsPrec :: Int -> AutoScalingSettingsUpdate -> ShowS
$cshowsPrec :: Int -> AutoScalingSettingsUpdate -> ShowS
Prelude.Show, forall x.
Rep AutoScalingSettingsUpdate x -> AutoScalingSettingsUpdate
forall x.
AutoScalingSettingsUpdate -> Rep AutoScalingSettingsUpdate x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep AutoScalingSettingsUpdate x -> AutoScalingSettingsUpdate
$cfrom :: forall x.
AutoScalingSettingsUpdate -> Rep AutoScalingSettingsUpdate x
Prelude.Generic)

-- |
-- Create a value of 'AutoScalingSettingsUpdate' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'autoScalingDisabled', 'autoScalingSettingsUpdate_autoScalingDisabled' - Disabled auto scaling for this global table or global secondary index.
--
-- 'autoScalingRoleArn', 'autoScalingSettingsUpdate_autoScalingRoleArn' - Role ARN used for configuring auto scaling policy.
--
-- 'maximumUnits', 'autoScalingSettingsUpdate_maximumUnits' - The maximum capacity units that a global table or global secondary index
-- should be scaled up to.
--
-- 'minimumUnits', 'autoScalingSettingsUpdate_minimumUnits' - The minimum capacity units that a global table or global secondary index
-- should be scaled down to.
--
-- 'scalingPolicyUpdate', 'autoScalingSettingsUpdate_scalingPolicyUpdate' - The scaling policy to apply for scaling target global table or global
-- secondary index capacity units.
newAutoScalingSettingsUpdate ::
  AutoScalingSettingsUpdate
newAutoScalingSettingsUpdate :: AutoScalingSettingsUpdate
newAutoScalingSettingsUpdate =
  AutoScalingSettingsUpdate'
    { $sel:autoScalingDisabled:AutoScalingSettingsUpdate' :: Maybe Bool
autoScalingDisabled =
        forall a. Maybe a
Prelude.Nothing,
      $sel:autoScalingRoleArn:AutoScalingSettingsUpdate' :: Maybe Text
autoScalingRoleArn = forall a. Maybe a
Prelude.Nothing,
      $sel:maximumUnits:AutoScalingSettingsUpdate' :: Maybe Natural
maximumUnits = forall a. Maybe a
Prelude.Nothing,
      $sel:minimumUnits:AutoScalingSettingsUpdate' :: Maybe Natural
minimumUnits = forall a. Maybe a
Prelude.Nothing,
      $sel:scalingPolicyUpdate:AutoScalingSettingsUpdate' :: Maybe AutoScalingPolicyUpdate
scalingPolicyUpdate = forall a. Maybe a
Prelude.Nothing
    }

-- | Disabled auto scaling for this global table or global secondary index.
autoScalingSettingsUpdate_autoScalingDisabled :: Lens.Lens' AutoScalingSettingsUpdate (Prelude.Maybe Prelude.Bool)
autoScalingSettingsUpdate_autoScalingDisabled :: Lens' AutoScalingSettingsUpdate (Maybe Bool)
autoScalingSettingsUpdate_autoScalingDisabled = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AutoScalingSettingsUpdate' {Maybe Bool
autoScalingDisabled :: Maybe Bool
$sel:autoScalingDisabled:AutoScalingSettingsUpdate' :: AutoScalingSettingsUpdate -> Maybe Bool
autoScalingDisabled} -> Maybe Bool
autoScalingDisabled) (\s :: AutoScalingSettingsUpdate
s@AutoScalingSettingsUpdate' {} Maybe Bool
a -> AutoScalingSettingsUpdate
s {$sel:autoScalingDisabled:AutoScalingSettingsUpdate' :: Maybe Bool
autoScalingDisabled = Maybe Bool
a} :: AutoScalingSettingsUpdate)

-- | Role ARN used for configuring auto scaling policy.
autoScalingSettingsUpdate_autoScalingRoleArn :: Lens.Lens' AutoScalingSettingsUpdate (Prelude.Maybe Prelude.Text)
autoScalingSettingsUpdate_autoScalingRoleArn :: Lens' AutoScalingSettingsUpdate (Maybe Text)
autoScalingSettingsUpdate_autoScalingRoleArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AutoScalingSettingsUpdate' {Maybe Text
autoScalingRoleArn :: Maybe Text
$sel:autoScalingRoleArn:AutoScalingSettingsUpdate' :: AutoScalingSettingsUpdate -> Maybe Text
autoScalingRoleArn} -> Maybe Text
autoScalingRoleArn) (\s :: AutoScalingSettingsUpdate
s@AutoScalingSettingsUpdate' {} Maybe Text
a -> AutoScalingSettingsUpdate
s {$sel:autoScalingRoleArn:AutoScalingSettingsUpdate' :: Maybe Text
autoScalingRoleArn = Maybe Text
a} :: AutoScalingSettingsUpdate)

-- | The maximum capacity units that a global table or global secondary index
-- should be scaled up to.
autoScalingSettingsUpdate_maximumUnits :: Lens.Lens' AutoScalingSettingsUpdate (Prelude.Maybe Prelude.Natural)
autoScalingSettingsUpdate_maximumUnits :: Lens' AutoScalingSettingsUpdate (Maybe Natural)
autoScalingSettingsUpdate_maximumUnits = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AutoScalingSettingsUpdate' {Maybe Natural
maximumUnits :: Maybe Natural
$sel:maximumUnits:AutoScalingSettingsUpdate' :: AutoScalingSettingsUpdate -> Maybe Natural
maximumUnits} -> Maybe Natural
maximumUnits) (\s :: AutoScalingSettingsUpdate
s@AutoScalingSettingsUpdate' {} Maybe Natural
a -> AutoScalingSettingsUpdate
s {$sel:maximumUnits:AutoScalingSettingsUpdate' :: Maybe Natural
maximumUnits = Maybe Natural
a} :: AutoScalingSettingsUpdate)

-- | The minimum capacity units that a global table or global secondary index
-- should be scaled down to.
autoScalingSettingsUpdate_minimumUnits :: Lens.Lens' AutoScalingSettingsUpdate (Prelude.Maybe Prelude.Natural)
autoScalingSettingsUpdate_minimumUnits :: Lens' AutoScalingSettingsUpdate (Maybe Natural)
autoScalingSettingsUpdate_minimumUnits = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AutoScalingSettingsUpdate' {Maybe Natural
minimumUnits :: Maybe Natural
$sel:minimumUnits:AutoScalingSettingsUpdate' :: AutoScalingSettingsUpdate -> Maybe Natural
minimumUnits} -> Maybe Natural
minimumUnits) (\s :: AutoScalingSettingsUpdate
s@AutoScalingSettingsUpdate' {} Maybe Natural
a -> AutoScalingSettingsUpdate
s {$sel:minimumUnits:AutoScalingSettingsUpdate' :: Maybe Natural
minimumUnits = Maybe Natural
a} :: AutoScalingSettingsUpdate)

-- | The scaling policy to apply for scaling target global table or global
-- secondary index capacity units.
autoScalingSettingsUpdate_scalingPolicyUpdate :: Lens.Lens' AutoScalingSettingsUpdate (Prelude.Maybe AutoScalingPolicyUpdate)
autoScalingSettingsUpdate_scalingPolicyUpdate :: Lens' AutoScalingSettingsUpdate (Maybe AutoScalingPolicyUpdate)
autoScalingSettingsUpdate_scalingPolicyUpdate = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AutoScalingSettingsUpdate' {Maybe AutoScalingPolicyUpdate
scalingPolicyUpdate :: Maybe AutoScalingPolicyUpdate
$sel:scalingPolicyUpdate:AutoScalingSettingsUpdate' :: AutoScalingSettingsUpdate -> Maybe AutoScalingPolicyUpdate
scalingPolicyUpdate} -> Maybe AutoScalingPolicyUpdate
scalingPolicyUpdate) (\s :: AutoScalingSettingsUpdate
s@AutoScalingSettingsUpdate' {} Maybe AutoScalingPolicyUpdate
a -> AutoScalingSettingsUpdate
s {$sel:scalingPolicyUpdate:AutoScalingSettingsUpdate' :: Maybe AutoScalingPolicyUpdate
scalingPolicyUpdate = Maybe AutoScalingPolicyUpdate
a} :: AutoScalingSettingsUpdate)

instance Prelude.Hashable AutoScalingSettingsUpdate where
  hashWithSalt :: Int -> AutoScalingSettingsUpdate -> Int
hashWithSalt Int
_salt AutoScalingSettingsUpdate' {Maybe Bool
Maybe Natural
Maybe Text
Maybe AutoScalingPolicyUpdate
scalingPolicyUpdate :: Maybe AutoScalingPolicyUpdate
minimumUnits :: Maybe Natural
maximumUnits :: Maybe Natural
autoScalingRoleArn :: Maybe Text
autoScalingDisabled :: Maybe Bool
$sel:scalingPolicyUpdate:AutoScalingSettingsUpdate' :: AutoScalingSettingsUpdate -> Maybe AutoScalingPolicyUpdate
$sel:minimumUnits:AutoScalingSettingsUpdate' :: AutoScalingSettingsUpdate -> Maybe Natural
$sel:maximumUnits:AutoScalingSettingsUpdate' :: AutoScalingSettingsUpdate -> Maybe Natural
$sel:autoScalingRoleArn:AutoScalingSettingsUpdate' :: AutoScalingSettingsUpdate -> Maybe Text
$sel:autoScalingDisabled:AutoScalingSettingsUpdate' :: AutoScalingSettingsUpdate -> Maybe Bool
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
autoScalingDisabled
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
autoScalingRoleArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
maximumUnits
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Natural
minimumUnits
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AutoScalingPolicyUpdate
scalingPolicyUpdate

instance Prelude.NFData AutoScalingSettingsUpdate where
  rnf :: AutoScalingSettingsUpdate -> ()
rnf AutoScalingSettingsUpdate' {Maybe Bool
Maybe Natural
Maybe Text
Maybe AutoScalingPolicyUpdate
scalingPolicyUpdate :: Maybe AutoScalingPolicyUpdate
minimumUnits :: Maybe Natural
maximumUnits :: Maybe Natural
autoScalingRoleArn :: Maybe Text
autoScalingDisabled :: Maybe Bool
$sel:scalingPolicyUpdate:AutoScalingSettingsUpdate' :: AutoScalingSettingsUpdate -> Maybe AutoScalingPolicyUpdate
$sel:minimumUnits:AutoScalingSettingsUpdate' :: AutoScalingSettingsUpdate -> Maybe Natural
$sel:maximumUnits:AutoScalingSettingsUpdate' :: AutoScalingSettingsUpdate -> Maybe Natural
$sel:autoScalingRoleArn:AutoScalingSettingsUpdate' :: AutoScalingSettingsUpdate -> Maybe Text
$sel:autoScalingDisabled:AutoScalingSettingsUpdate' :: AutoScalingSettingsUpdate -> Maybe Bool
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
autoScalingDisabled
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
autoScalingRoleArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
maximumUnits
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Natural
minimumUnits
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe AutoScalingPolicyUpdate
scalingPolicyUpdate

instance Data.ToJSON AutoScalingSettingsUpdate where
  toJSON :: AutoScalingSettingsUpdate -> Value
toJSON AutoScalingSettingsUpdate' {Maybe Bool
Maybe Natural
Maybe Text
Maybe AutoScalingPolicyUpdate
scalingPolicyUpdate :: Maybe AutoScalingPolicyUpdate
minimumUnits :: Maybe Natural
maximumUnits :: Maybe Natural
autoScalingRoleArn :: Maybe Text
autoScalingDisabled :: Maybe Bool
$sel:scalingPolicyUpdate:AutoScalingSettingsUpdate' :: AutoScalingSettingsUpdate -> Maybe AutoScalingPolicyUpdate
$sel:minimumUnits:AutoScalingSettingsUpdate' :: AutoScalingSettingsUpdate -> Maybe Natural
$sel:maximumUnits:AutoScalingSettingsUpdate' :: AutoScalingSettingsUpdate -> Maybe Natural
$sel:autoScalingRoleArn:AutoScalingSettingsUpdate' :: AutoScalingSettingsUpdate -> Maybe Text
$sel:autoScalingDisabled:AutoScalingSettingsUpdate' :: AutoScalingSettingsUpdate -> Maybe Bool
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"AutoScalingDisabled" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Bool
autoScalingDisabled,
            (Key
"AutoScalingRoleArn" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Text
autoScalingRoleArn,
            (Key
"MaximumUnits" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
maximumUnits,
            (Key
"MinimumUnits" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Natural
minimumUnits,
            (Key
"ScalingPolicyUpdate" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe AutoScalingPolicyUpdate
scalingPolicyUpdate
          ]
      )