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

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

-- |
-- Module      : Amazonka.ResilienceHub.UpdateResiliencyPolicy
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Updates a resiliency policy.
module Amazonka.ResilienceHub.UpdateResiliencyPolicy
  ( -- * Creating a Request
    UpdateResiliencyPolicy (..),
    newUpdateResiliencyPolicy,

    -- * Request Lenses
    updateResiliencyPolicy_dataLocationConstraint,
    updateResiliencyPolicy_policy,
    updateResiliencyPolicy_policyDescription,
    updateResiliencyPolicy_policyName,
    updateResiliencyPolicy_tier,
    updateResiliencyPolicy_policyArn,

    -- * Destructuring the Response
    UpdateResiliencyPolicyResponse (..),
    newUpdateResiliencyPolicyResponse,

    -- * Response Lenses
    updateResiliencyPolicyResponse_httpStatus,
    updateResiliencyPolicyResponse_policy,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import Amazonka.ResilienceHub.Types
import qualified Amazonka.Response as Response

-- | /See:/ 'newUpdateResiliencyPolicy' smart constructor.
data UpdateResiliencyPolicy = UpdateResiliencyPolicy'
  { -- | Specifies a high-level geographical location constraint for where your
    -- resilience policy data can be stored.
    UpdateResiliencyPolicy -> Maybe DataLocationConstraint
dataLocationConstraint :: Prelude.Maybe DataLocationConstraint,
    -- | The type of resiliency policy to be created, including the recovery time
    -- objective (RTO) and recovery point objective (RPO) in seconds.
    UpdateResiliencyPolicy
-> Maybe (HashMap DisruptionType FailurePolicy)
policy :: Prelude.Maybe (Prelude.HashMap DisruptionType FailurePolicy),
    -- | The description for the policy.
    UpdateResiliencyPolicy -> Maybe Text
policyDescription :: Prelude.Maybe Prelude.Text,
    -- | The name of the policy
    UpdateResiliencyPolicy -> Maybe Text
policyName :: Prelude.Maybe Prelude.Text,
    -- | The tier for this resiliency policy, ranging from the highest severity
    -- (@MissionCritical@) to lowest (@NonCritical@).
    UpdateResiliencyPolicy -> Maybe ResiliencyPolicyTier
tier :: Prelude.Maybe ResiliencyPolicyTier,
    -- | The Amazon Resource Name (ARN) of the resiliency policy. The format for
    -- this ARN is:
    -- arn:@partition@:resiliencehub:@region@:@account@:resiliency-policy\/@policy-id@.
    -- For more information about ARNs, see
    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
    -- in the /AWS General Reference/.
    UpdateResiliencyPolicy -> Text
policyArn :: Prelude.Text
  }
  deriving (UpdateResiliencyPolicy -> UpdateResiliencyPolicy -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateResiliencyPolicy -> UpdateResiliencyPolicy -> Bool
$c/= :: UpdateResiliencyPolicy -> UpdateResiliencyPolicy -> Bool
== :: UpdateResiliencyPolicy -> UpdateResiliencyPolicy -> Bool
$c== :: UpdateResiliencyPolicy -> UpdateResiliencyPolicy -> Bool
Prelude.Eq, ReadPrec [UpdateResiliencyPolicy]
ReadPrec UpdateResiliencyPolicy
Int -> ReadS UpdateResiliencyPolicy
ReadS [UpdateResiliencyPolicy]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateResiliencyPolicy]
$creadListPrec :: ReadPrec [UpdateResiliencyPolicy]
readPrec :: ReadPrec UpdateResiliencyPolicy
$creadPrec :: ReadPrec UpdateResiliencyPolicy
readList :: ReadS [UpdateResiliencyPolicy]
$creadList :: ReadS [UpdateResiliencyPolicy]
readsPrec :: Int -> ReadS UpdateResiliencyPolicy
$creadsPrec :: Int -> ReadS UpdateResiliencyPolicy
Prelude.Read, Int -> UpdateResiliencyPolicy -> ShowS
[UpdateResiliencyPolicy] -> ShowS
UpdateResiliencyPolicy -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateResiliencyPolicy] -> ShowS
$cshowList :: [UpdateResiliencyPolicy] -> ShowS
show :: UpdateResiliencyPolicy -> String
$cshow :: UpdateResiliencyPolicy -> String
showsPrec :: Int -> UpdateResiliencyPolicy -> ShowS
$cshowsPrec :: Int -> UpdateResiliencyPolicy -> ShowS
Prelude.Show, forall x. Rep UpdateResiliencyPolicy x -> UpdateResiliencyPolicy
forall x. UpdateResiliencyPolicy -> Rep UpdateResiliencyPolicy x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateResiliencyPolicy x -> UpdateResiliencyPolicy
$cfrom :: forall x. UpdateResiliencyPolicy -> Rep UpdateResiliencyPolicy x
Prelude.Generic)

-- |
-- Create a value of 'UpdateResiliencyPolicy' 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:
--
-- 'dataLocationConstraint', 'updateResiliencyPolicy_dataLocationConstraint' - Specifies a high-level geographical location constraint for where your
-- resilience policy data can be stored.
--
-- 'policy', 'updateResiliencyPolicy_policy' - The type of resiliency policy to be created, including the recovery time
-- objective (RTO) and recovery point objective (RPO) in seconds.
--
-- 'policyDescription', 'updateResiliencyPolicy_policyDescription' - The description for the policy.
--
-- 'policyName', 'updateResiliencyPolicy_policyName' - The name of the policy
--
-- 'tier', 'updateResiliencyPolicy_tier' - The tier for this resiliency policy, ranging from the highest severity
-- (@MissionCritical@) to lowest (@NonCritical@).
--
-- 'policyArn', 'updateResiliencyPolicy_policyArn' - The Amazon Resource Name (ARN) of the resiliency policy. The format for
-- this ARN is:
-- arn:@partition@:resiliencehub:@region@:@account@:resiliency-policy\/@policy-id@.
-- For more information about ARNs, see
-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
-- in the /AWS General Reference/.
newUpdateResiliencyPolicy ::
  -- | 'policyArn'
  Prelude.Text ->
  UpdateResiliencyPolicy
newUpdateResiliencyPolicy :: Text -> UpdateResiliencyPolicy
newUpdateResiliencyPolicy Text
pPolicyArn_ =
  UpdateResiliencyPolicy'
    { $sel:dataLocationConstraint:UpdateResiliencyPolicy' :: Maybe DataLocationConstraint
dataLocationConstraint =
        forall a. Maybe a
Prelude.Nothing,
      $sel:policy:UpdateResiliencyPolicy' :: Maybe (HashMap DisruptionType FailurePolicy)
policy = forall a. Maybe a
Prelude.Nothing,
      $sel:policyDescription:UpdateResiliencyPolicy' :: Maybe Text
policyDescription = forall a. Maybe a
Prelude.Nothing,
      $sel:policyName:UpdateResiliencyPolicy' :: Maybe Text
policyName = forall a. Maybe a
Prelude.Nothing,
      $sel:tier:UpdateResiliencyPolicy' :: Maybe ResiliencyPolicyTier
tier = forall a. Maybe a
Prelude.Nothing,
      $sel:policyArn:UpdateResiliencyPolicy' :: Text
policyArn = Text
pPolicyArn_
    }

-- | Specifies a high-level geographical location constraint for where your
-- resilience policy data can be stored.
updateResiliencyPolicy_dataLocationConstraint :: Lens.Lens' UpdateResiliencyPolicy (Prelude.Maybe DataLocationConstraint)
updateResiliencyPolicy_dataLocationConstraint :: Lens' UpdateResiliencyPolicy (Maybe DataLocationConstraint)
updateResiliencyPolicy_dataLocationConstraint = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateResiliencyPolicy' {Maybe DataLocationConstraint
dataLocationConstraint :: Maybe DataLocationConstraint
$sel:dataLocationConstraint:UpdateResiliencyPolicy' :: UpdateResiliencyPolicy -> Maybe DataLocationConstraint
dataLocationConstraint} -> Maybe DataLocationConstraint
dataLocationConstraint) (\s :: UpdateResiliencyPolicy
s@UpdateResiliencyPolicy' {} Maybe DataLocationConstraint
a -> UpdateResiliencyPolicy
s {$sel:dataLocationConstraint:UpdateResiliencyPolicy' :: Maybe DataLocationConstraint
dataLocationConstraint = Maybe DataLocationConstraint
a} :: UpdateResiliencyPolicy)

-- | The type of resiliency policy to be created, including the recovery time
-- objective (RTO) and recovery point objective (RPO) in seconds.
updateResiliencyPolicy_policy :: Lens.Lens' UpdateResiliencyPolicy (Prelude.Maybe (Prelude.HashMap DisruptionType FailurePolicy))
updateResiliencyPolicy_policy :: Lens'
  UpdateResiliencyPolicy
  (Maybe (HashMap DisruptionType FailurePolicy))
updateResiliencyPolicy_policy = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateResiliencyPolicy' {Maybe (HashMap DisruptionType FailurePolicy)
policy :: Maybe (HashMap DisruptionType FailurePolicy)
$sel:policy:UpdateResiliencyPolicy' :: UpdateResiliencyPolicy
-> Maybe (HashMap DisruptionType FailurePolicy)
policy} -> Maybe (HashMap DisruptionType FailurePolicy)
policy) (\s :: UpdateResiliencyPolicy
s@UpdateResiliencyPolicy' {} Maybe (HashMap DisruptionType FailurePolicy)
a -> UpdateResiliencyPolicy
s {$sel:policy:UpdateResiliencyPolicy' :: Maybe (HashMap DisruptionType FailurePolicy)
policy = Maybe (HashMap DisruptionType FailurePolicy)
a} :: UpdateResiliencyPolicy) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The description for the policy.
updateResiliencyPolicy_policyDescription :: Lens.Lens' UpdateResiliencyPolicy (Prelude.Maybe Prelude.Text)
updateResiliencyPolicy_policyDescription :: Lens' UpdateResiliencyPolicy (Maybe Text)
updateResiliencyPolicy_policyDescription = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateResiliencyPolicy' {Maybe Text
policyDescription :: Maybe Text
$sel:policyDescription:UpdateResiliencyPolicy' :: UpdateResiliencyPolicy -> Maybe Text
policyDescription} -> Maybe Text
policyDescription) (\s :: UpdateResiliencyPolicy
s@UpdateResiliencyPolicy' {} Maybe Text
a -> UpdateResiliencyPolicy
s {$sel:policyDescription:UpdateResiliencyPolicy' :: Maybe Text
policyDescription = Maybe Text
a} :: UpdateResiliencyPolicy)

-- | The name of the policy
updateResiliencyPolicy_policyName :: Lens.Lens' UpdateResiliencyPolicy (Prelude.Maybe Prelude.Text)
updateResiliencyPolicy_policyName :: Lens' UpdateResiliencyPolicy (Maybe Text)
updateResiliencyPolicy_policyName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateResiliencyPolicy' {Maybe Text
policyName :: Maybe Text
$sel:policyName:UpdateResiliencyPolicy' :: UpdateResiliencyPolicy -> Maybe Text
policyName} -> Maybe Text
policyName) (\s :: UpdateResiliencyPolicy
s@UpdateResiliencyPolicy' {} Maybe Text
a -> UpdateResiliencyPolicy
s {$sel:policyName:UpdateResiliencyPolicy' :: Maybe Text
policyName = Maybe Text
a} :: UpdateResiliencyPolicy)

-- | The tier for this resiliency policy, ranging from the highest severity
-- (@MissionCritical@) to lowest (@NonCritical@).
updateResiliencyPolicy_tier :: Lens.Lens' UpdateResiliencyPolicy (Prelude.Maybe ResiliencyPolicyTier)
updateResiliencyPolicy_tier :: Lens' UpdateResiliencyPolicy (Maybe ResiliencyPolicyTier)
updateResiliencyPolicy_tier = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateResiliencyPolicy' {Maybe ResiliencyPolicyTier
tier :: Maybe ResiliencyPolicyTier
$sel:tier:UpdateResiliencyPolicy' :: UpdateResiliencyPolicy -> Maybe ResiliencyPolicyTier
tier} -> Maybe ResiliencyPolicyTier
tier) (\s :: UpdateResiliencyPolicy
s@UpdateResiliencyPolicy' {} Maybe ResiliencyPolicyTier
a -> UpdateResiliencyPolicy
s {$sel:tier:UpdateResiliencyPolicy' :: Maybe ResiliencyPolicyTier
tier = Maybe ResiliencyPolicyTier
a} :: UpdateResiliencyPolicy)

-- | The Amazon Resource Name (ARN) of the resiliency policy. The format for
-- this ARN is:
-- arn:@partition@:resiliencehub:@region@:@account@:resiliency-policy\/@policy-id@.
-- For more information about ARNs, see
-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
-- in the /AWS General Reference/.
updateResiliencyPolicy_policyArn :: Lens.Lens' UpdateResiliencyPolicy Prelude.Text
updateResiliencyPolicy_policyArn :: Lens' UpdateResiliencyPolicy Text
updateResiliencyPolicy_policyArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateResiliencyPolicy' {Text
policyArn :: Text
$sel:policyArn:UpdateResiliencyPolicy' :: UpdateResiliencyPolicy -> Text
policyArn} -> Text
policyArn) (\s :: UpdateResiliencyPolicy
s@UpdateResiliencyPolicy' {} Text
a -> UpdateResiliencyPolicy
s {$sel:policyArn:UpdateResiliencyPolicy' :: Text
policyArn = Text
a} :: UpdateResiliencyPolicy)

instance Core.AWSRequest UpdateResiliencyPolicy where
  type
    AWSResponse UpdateResiliencyPolicy =
      UpdateResiliencyPolicyResponse
  request :: (Service -> Service)
-> UpdateResiliencyPolicy -> Request UpdateResiliencyPolicy
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy UpdateResiliencyPolicy
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse UpdateResiliencyPolicy)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Int -> ResiliencyPolicy -> UpdateResiliencyPolicyResponse
UpdateResiliencyPolicyResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String a
Data..:> Key
"policy")
      )

instance Prelude.Hashable UpdateResiliencyPolicy where
  hashWithSalt :: Int -> UpdateResiliencyPolicy -> Int
hashWithSalt Int
_salt UpdateResiliencyPolicy' {Maybe Text
Maybe (HashMap DisruptionType FailurePolicy)
Maybe DataLocationConstraint
Maybe ResiliencyPolicyTier
Text
policyArn :: Text
tier :: Maybe ResiliencyPolicyTier
policyName :: Maybe Text
policyDescription :: Maybe Text
policy :: Maybe (HashMap DisruptionType FailurePolicy)
dataLocationConstraint :: Maybe DataLocationConstraint
$sel:policyArn:UpdateResiliencyPolicy' :: UpdateResiliencyPolicy -> Text
$sel:tier:UpdateResiliencyPolicy' :: UpdateResiliencyPolicy -> Maybe ResiliencyPolicyTier
$sel:policyName:UpdateResiliencyPolicy' :: UpdateResiliencyPolicy -> Maybe Text
$sel:policyDescription:UpdateResiliencyPolicy' :: UpdateResiliencyPolicy -> Maybe Text
$sel:policy:UpdateResiliencyPolicy' :: UpdateResiliencyPolicy
-> Maybe (HashMap DisruptionType FailurePolicy)
$sel:dataLocationConstraint:UpdateResiliencyPolicy' :: UpdateResiliencyPolicy -> Maybe DataLocationConstraint
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DataLocationConstraint
dataLocationConstraint
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap DisruptionType FailurePolicy)
policy
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
policyDescription
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
policyName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ResiliencyPolicyTier
tier
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
policyArn

instance Prelude.NFData UpdateResiliencyPolicy where
  rnf :: UpdateResiliencyPolicy -> ()
rnf UpdateResiliencyPolicy' {Maybe Text
Maybe (HashMap DisruptionType FailurePolicy)
Maybe DataLocationConstraint
Maybe ResiliencyPolicyTier
Text
policyArn :: Text
tier :: Maybe ResiliencyPolicyTier
policyName :: Maybe Text
policyDescription :: Maybe Text
policy :: Maybe (HashMap DisruptionType FailurePolicy)
dataLocationConstraint :: Maybe DataLocationConstraint
$sel:policyArn:UpdateResiliencyPolicy' :: UpdateResiliencyPolicy -> Text
$sel:tier:UpdateResiliencyPolicy' :: UpdateResiliencyPolicy -> Maybe ResiliencyPolicyTier
$sel:policyName:UpdateResiliencyPolicy' :: UpdateResiliencyPolicy -> Maybe Text
$sel:policyDescription:UpdateResiliencyPolicy' :: UpdateResiliencyPolicy -> Maybe Text
$sel:policy:UpdateResiliencyPolicy' :: UpdateResiliencyPolicy
-> Maybe (HashMap DisruptionType FailurePolicy)
$sel:dataLocationConstraint:UpdateResiliencyPolicy' :: UpdateResiliencyPolicy -> Maybe DataLocationConstraint
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe DataLocationConstraint
dataLocationConstraint
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (HashMap DisruptionType FailurePolicy)
policy
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
policyDescription
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
policyName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ResiliencyPolicyTier
tier
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
policyArn

instance Data.ToHeaders UpdateResiliencyPolicy where
  toHeaders :: UpdateResiliencyPolicy -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON UpdateResiliencyPolicy where
  toJSON :: UpdateResiliencyPolicy -> Value
toJSON UpdateResiliencyPolicy' {Maybe Text
Maybe (HashMap DisruptionType FailurePolicy)
Maybe DataLocationConstraint
Maybe ResiliencyPolicyTier
Text
policyArn :: Text
tier :: Maybe ResiliencyPolicyTier
policyName :: Maybe Text
policyDescription :: Maybe Text
policy :: Maybe (HashMap DisruptionType FailurePolicy)
dataLocationConstraint :: Maybe DataLocationConstraint
$sel:policyArn:UpdateResiliencyPolicy' :: UpdateResiliencyPolicy -> Text
$sel:tier:UpdateResiliencyPolicy' :: UpdateResiliencyPolicy -> Maybe ResiliencyPolicyTier
$sel:policyName:UpdateResiliencyPolicy' :: UpdateResiliencyPolicy -> Maybe Text
$sel:policyDescription:UpdateResiliencyPolicy' :: UpdateResiliencyPolicy -> Maybe Text
$sel:policy:UpdateResiliencyPolicy' :: UpdateResiliencyPolicy
-> Maybe (HashMap DisruptionType FailurePolicy)
$sel:dataLocationConstraint:UpdateResiliencyPolicy' :: UpdateResiliencyPolicy -> Maybe DataLocationConstraint
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"dataLocationConstraint" 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 DataLocationConstraint
dataLocationConstraint,
            (Key
"policy" 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 (HashMap DisruptionType FailurePolicy)
policy,
            (Key
"policyDescription" 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
policyDescription,
            (Key
"policyName" 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
policyName,
            (Key
"tier" 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 ResiliencyPolicyTier
tier,
            forall a. a -> Maybe a
Prelude.Just (Key
"policyArn" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
policyArn)
          ]
      )

instance Data.ToPath UpdateResiliencyPolicy where
  toPath :: UpdateResiliencyPolicy -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/update-resiliency-policy"

instance Data.ToQuery UpdateResiliencyPolicy where
  toQuery :: UpdateResiliencyPolicy -> QueryString
toQuery = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

-- | /See:/ 'newUpdateResiliencyPolicyResponse' smart constructor.
data UpdateResiliencyPolicyResponse = UpdateResiliencyPolicyResponse'
  { -- | The response's http status code.
    UpdateResiliencyPolicyResponse -> Int
httpStatus :: Prelude.Int,
    -- | The type of resiliency policy that was updated, including the recovery
    -- time objective (RTO) and recovery point objective (RPO) in seconds.
    UpdateResiliencyPolicyResponse -> ResiliencyPolicy
policy :: ResiliencyPolicy
  }
  deriving (UpdateResiliencyPolicyResponse
-> UpdateResiliencyPolicyResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateResiliencyPolicyResponse
-> UpdateResiliencyPolicyResponse -> Bool
$c/= :: UpdateResiliencyPolicyResponse
-> UpdateResiliencyPolicyResponse -> Bool
== :: UpdateResiliencyPolicyResponse
-> UpdateResiliencyPolicyResponse -> Bool
$c== :: UpdateResiliencyPolicyResponse
-> UpdateResiliencyPolicyResponse -> Bool
Prelude.Eq, Int -> UpdateResiliencyPolicyResponse -> ShowS
[UpdateResiliencyPolicyResponse] -> ShowS
UpdateResiliencyPolicyResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateResiliencyPolicyResponse] -> ShowS
$cshowList :: [UpdateResiliencyPolicyResponse] -> ShowS
show :: UpdateResiliencyPolicyResponse -> String
$cshow :: UpdateResiliencyPolicyResponse -> String
showsPrec :: Int -> UpdateResiliencyPolicyResponse -> ShowS
$cshowsPrec :: Int -> UpdateResiliencyPolicyResponse -> ShowS
Prelude.Show, forall x.
Rep UpdateResiliencyPolicyResponse x
-> UpdateResiliencyPolicyResponse
forall x.
UpdateResiliencyPolicyResponse
-> Rep UpdateResiliencyPolicyResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep UpdateResiliencyPolicyResponse x
-> UpdateResiliencyPolicyResponse
$cfrom :: forall x.
UpdateResiliencyPolicyResponse
-> Rep UpdateResiliencyPolicyResponse x
Prelude.Generic)

-- |
-- Create a value of 'UpdateResiliencyPolicyResponse' 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:
--
-- 'httpStatus', 'updateResiliencyPolicyResponse_httpStatus' - The response's http status code.
--
-- 'policy', 'updateResiliencyPolicyResponse_policy' - The type of resiliency policy that was updated, including the recovery
-- time objective (RTO) and recovery point objective (RPO) in seconds.
newUpdateResiliencyPolicyResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'policy'
  ResiliencyPolicy ->
  UpdateResiliencyPolicyResponse
newUpdateResiliencyPolicyResponse :: Int -> ResiliencyPolicy -> UpdateResiliencyPolicyResponse
newUpdateResiliencyPolicyResponse
  Int
pHttpStatus_
  ResiliencyPolicy
pPolicy_ =
    UpdateResiliencyPolicyResponse'
      { $sel:httpStatus:UpdateResiliencyPolicyResponse' :: Int
httpStatus =
          Int
pHttpStatus_,
        $sel:policy:UpdateResiliencyPolicyResponse' :: ResiliencyPolicy
policy = ResiliencyPolicy
pPolicy_
      }

-- | The response's http status code.
updateResiliencyPolicyResponse_httpStatus :: Lens.Lens' UpdateResiliencyPolicyResponse Prelude.Int
updateResiliencyPolicyResponse_httpStatus :: Lens' UpdateResiliencyPolicyResponse Int
updateResiliencyPolicyResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateResiliencyPolicyResponse' {Int
httpStatus :: Int
$sel:httpStatus:UpdateResiliencyPolicyResponse' :: UpdateResiliencyPolicyResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: UpdateResiliencyPolicyResponse
s@UpdateResiliencyPolicyResponse' {} Int
a -> UpdateResiliencyPolicyResponse
s {$sel:httpStatus:UpdateResiliencyPolicyResponse' :: Int
httpStatus = Int
a} :: UpdateResiliencyPolicyResponse)

-- | The type of resiliency policy that was updated, including the recovery
-- time objective (RTO) and recovery point objective (RPO) in seconds.
updateResiliencyPolicyResponse_policy :: Lens.Lens' UpdateResiliencyPolicyResponse ResiliencyPolicy
updateResiliencyPolicyResponse_policy :: Lens' UpdateResiliencyPolicyResponse ResiliencyPolicy
updateResiliencyPolicyResponse_policy = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateResiliencyPolicyResponse' {ResiliencyPolicy
policy :: ResiliencyPolicy
$sel:policy:UpdateResiliencyPolicyResponse' :: UpdateResiliencyPolicyResponse -> ResiliencyPolicy
policy} -> ResiliencyPolicy
policy) (\s :: UpdateResiliencyPolicyResponse
s@UpdateResiliencyPolicyResponse' {} ResiliencyPolicy
a -> UpdateResiliencyPolicyResponse
s {$sel:policy:UpdateResiliencyPolicyResponse' :: ResiliencyPolicy
policy = ResiliencyPolicy
a} :: UpdateResiliencyPolicyResponse)

instance
  Prelude.NFData
    UpdateResiliencyPolicyResponse
  where
  rnf :: UpdateResiliencyPolicyResponse -> ()
rnf UpdateResiliencyPolicyResponse' {Int
ResiliencyPolicy
policy :: ResiliencyPolicy
httpStatus :: Int
$sel:policy:UpdateResiliencyPolicyResponse' :: UpdateResiliencyPolicyResponse -> ResiliencyPolicy
$sel:httpStatus:UpdateResiliencyPolicyResponse' :: UpdateResiliencyPolicyResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf ResiliencyPolicy
policy