{-# 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.CreateResiliencyPolicy
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates a resiliency policy for an application.
module Amazonka.ResilienceHub.CreateResiliencyPolicy
  ( -- * Creating a Request
    CreateResiliencyPolicy (..),
    newCreateResiliencyPolicy,

    -- * Request Lenses
    createResiliencyPolicy_clientToken,
    createResiliencyPolicy_dataLocationConstraint,
    createResiliencyPolicy_policyDescription,
    createResiliencyPolicy_tags,
    createResiliencyPolicy_policy,
    createResiliencyPolicy_policyName,
    createResiliencyPolicy_tier,

    -- * Destructuring the Response
    CreateResiliencyPolicyResponse (..),
    newCreateResiliencyPolicyResponse,

    -- * Response Lenses
    createResiliencyPolicyResponse_httpStatus,
    createResiliencyPolicyResponse_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:/ 'newCreateResiliencyPolicy' smart constructor.
data CreateResiliencyPolicy = CreateResiliencyPolicy'
  { -- | Used for an idempotency token. A client token is a unique,
    -- case-sensitive string of up to 64 ASCII characters. You should not reuse
    -- the same client token for other API requests.
    CreateResiliencyPolicy -> Maybe Text
clientToken :: Prelude.Maybe Prelude.Text,
    -- | Specifies a high-level geographical location constraint for where your
    -- resilience policy data can be stored.
    CreateResiliencyPolicy -> Maybe DataLocationConstraint
dataLocationConstraint :: Prelude.Maybe DataLocationConstraint,
    -- | The description for the policy.
    CreateResiliencyPolicy -> Maybe Text
policyDescription :: Prelude.Maybe Prelude.Text,
    -- | The tags assigned to the resource. A tag is a label that you assign to
    -- an Amazon Web Services resource. Each tag consists of a key\/value pair.
    CreateResiliencyPolicy -> Maybe (Sensitive (HashMap Text Text))
tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
    -- | The type of resiliency policy to be created, including the recovery time
    -- objective (RTO) and recovery point objective (RPO) in seconds.
    CreateResiliencyPolicy -> HashMap DisruptionType FailurePolicy
policy :: Prelude.HashMap DisruptionType FailurePolicy,
    -- | The name of the policy
    CreateResiliencyPolicy -> Text
policyName :: Prelude.Text,
    -- | The tier for this resiliency policy, ranging from the highest severity
    -- (@MissionCritical@) to lowest (@NonCritical@).
    CreateResiliencyPolicy -> ResiliencyPolicyTier
tier :: ResiliencyPolicyTier
  }
  deriving (CreateResiliencyPolicy -> CreateResiliencyPolicy -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateResiliencyPolicy -> CreateResiliencyPolicy -> Bool
$c/= :: CreateResiliencyPolicy -> CreateResiliencyPolicy -> Bool
== :: CreateResiliencyPolicy -> CreateResiliencyPolicy -> Bool
$c== :: CreateResiliencyPolicy -> CreateResiliencyPolicy -> Bool
Prelude.Eq, Int -> CreateResiliencyPolicy -> ShowS
[CreateResiliencyPolicy] -> ShowS
CreateResiliencyPolicy -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateResiliencyPolicy] -> ShowS
$cshowList :: [CreateResiliencyPolicy] -> ShowS
show :: CreateResiliencyPolicy -> String
$cshow :: CreateResiliencyPolicy -> String
showsPrec :: Int -> CreateResiliencyPolicy -> ShowS
$cshowsPrec :: Int -> CreateResiliencyPolicy -> ShowS
Prelude.Show, forall x. Rep CreateResiliencyPolicy x -> CreateResiliencyPolicy
forall x. CreateResiliencyPolicy -> Rep CreateResiliencyPolicy x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateResiliencyPolicy x -> CreateResiliencyPolicy
$cfrom :: forall x. CreateResiliencyPolicy -> Rep CreateResiliencyPolicy x
Prelude.Generic)

-- |
-- Create a value of 'CreateResiliencyPolicy' 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:
--
-- 'clientToken', 'createResiliencyPolicy_clientToken' - Used for an idempotency token. A client token is a unique,
-- case-sensitive string of up to 64 ASCII characters. You should not reuse
-- the same client token for other API requests.
--
-- 'dataLocationConstraint', 'createResiliencyPolicy_dataLocationConstraint' - Specifies a high-level geographical location constraint for where your
-- resilience policy data can be stored.
--
-- 'policyDescription', 'createResiliencyPolicy_policyDescription' - The description for the policy.
--
-- 'tags', 'createResiliencyPolicy_tags' - The tags assigned to the resource. A tag is a label that you assign to
-- an Amazon Web Services resource. Each tag consists of a key\/value pair.
--
-- 'policy', 'createResiliencyPolicy_policy' - The type of resiliency policy to be created, including the recovery time
-- objective (RTO) and recovery point objective (RPO) in seconds.
--
-- 'policyName', 'createResiliencyPolicy_policyName' - The name of the policy
--
-- 'tier', 'createResiliencyPolicy_tier' - The tier for this resiliency policy, ranging from the highest severity
-- (@MissionCritical@) to lowest (@NonCritical@).
newCreateResiliencyPolicy ::
  -- | 'policyName'
  Prelude.Text ->
  -- | 'tier'
  ResiliencyPolicyTier ->
  CreateResiliencyPolicy
newCreateResiliencyPolicy :: Text -> ResiliencyPolicyTier -> CreateResiliencyPolicy
newCreateResiliencyPolicy Text
pPolicyName_ ResiliencyPolicyTier
pTier_ =
  CreateResiliencyPolicy'
    { $sel:clientToken:CreateResiliencyPolicy' :: Maybe Text
clientToken =
        forall a. Maybe a
Prelude.Nothing,
      $sel:dataLocationConstraint:CreateResiliencyPolicy' :: Maybe DataLocationConstraint
dataLocationConstraint = forall a. Maybe a
Prelude.Nothing,
      $sel:policyDescription:CreateResiliencyPolicy' :: Maybe Text
policyDescription = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:CreateResiliencyPolicy' :: Maybe (Sensitive (HashMap Text Text))
tags = forall a. Maybe a
Prelude.Nothing,
      $sel:policy:CreateResiliencyPolicy' :: HashMap DisruptionType FailurePolicy
policy = forall a. Monoid a => a
Prelude.mempty,
      $sel:policyName:CreateResiliencyPolicy' :: Text
policyName = Text
pPolicyName_,
      $sel:tier:CreateResiliencyPolicy' :: ResiliencyPolicyTier
tier = ResiliencyPolicyTier
pTier_
    }

-- | Used for an idempotency token. A client token is a unique,
-- case-sensitive string of up to 64 ASCII characters. You should not reuse
-- the same client token for other API requests.
createResiliencyPolicy_clientToken :: Lens.Lens' CreateResiliencyPolicy (Prelude.Maybe Prelude.Text)
createResiliencyPolicy_clientToken :: Lens' CreateResiliencyPolicy (Maybe Text)
createResiliencyPolicy_clientToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateResiliencyPolicy' {Maybe Text
clientToken :: Maybe Text
$sel:clientToken:CreateResiliencyPolicy' :: CreateResiliencyPolicy -> Maybe Text
clientToken} -> Maybe Text
clientToken) (\s :: CreateResiliencyPolicy
s@CreateResiliencyPolicy' {} Maybe Text
a -> CreateResiliencyPolicy
s {$sel:clientToken:CreateResiliencyPolicy' :: Maybe Text
clientToken = Maybe Text
a} :: CreateResiliencyPolicy)

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

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

-- | The tags assigned to the resource. A tag is a label that you assign to
-- an Amazon Web Services resource. Each tag consists of a key\/value pair.
createResiliencyPolicy_tags :: Lens.Lens' CreateResiliencyPolicy (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
createResiliencyPolicy_tags :: Lens' CreateResiliencyPolicy (Maybe (HashMap Text Text))
createResiliencyPolicy_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateResiliencyPolicy' {Maybe (Sensitive (HashMap Text Text))
tags :: Maybe (Sensitive (HashMap Text Text))
$sel:tags:CreateResiliencyPolicy' :: CreateResiliencyPolicy -> Maybe (Sensitive (HashMap Text Text))
tags} -> Maybe (Sensitive (HashMap Text Text))
tags) (\s :: CreateResiliencyPolicy
s@CreateResiliencyPolicy' {} Maybe (Sensitive (HashMap Text Text))
a -> CreateResiliencyPolicy
s {$sel:tags:CreateResiliencyPolicy' :: Maybe (Sensitive (HashMap Text Text))
tags = Maybe (Sensitive (HashMap Text Text))
a} :: CreateResiliencyPolicy) 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 a. Iso' (Sensitive a) a
Data._Sensitive forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced)

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

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

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

instance Core.AWSRequest CreateResiliencyPolicy where
  type
    AWSResponse CreateResiliencyPolicy =
      CreateResiliencyPolicyResponse
  request :: (Service -> Service)
-> CreateResiliencyPolicy -> Request CreateResiliencyPolicy
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 CreateResiliencyPolicy
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse CreateResiliencyPolicy)))
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 -> CreateResiliencyPolicyResponse
CreateResiliencyPolicyResponse'
            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 CreateResiliencyPolicy where
  hashWithSalt :: Int -> CreateResiliencyPolicy -> Int
hashWithSalt Int
_salt CreateResiliencyPolicy' {Maybe Text
Maybe (Sensitive (HashMap Text Text))
Maybe DataLocationConstraint
Text
HashMap DisruptionType FailurePolicy
ResiliencyPolicyTier
tier :: ResiliencyPolicyTier
policyName :: Text
policy :: HashMap DisruptionType FailurePolicy
tags :: Maybe (Sensitive (HashMap Text Text))
policyDescription :: Maybe Text
dataLocationConstraint :: Maybe DataLocationConstraint
clientToken :: Maybe Text
$sel:tier:CreateResiliencyPolicy' :: CreateResiliencyPolicy -> ResiliencyPolicyTier
$sel:policyName:CreateResiliencyPolicy' :: CreateResiliencyPolicy -> Text
$sel:policy:CreateResiliencyPolicy' :: CreateResiliencyPolicy -> HashMap DisruptionType FailurePolicy
$sel:tags:CreateResiliencyPolicy' :: CreateResiliencyPolicy -> Maybe (Sensitive (HashMap Text Text))
$sel:policyDescription:CreateResiliencyPolicy' :: CreateResiliencyPolicy -> Maybe Text
$sel:dataLocationConstraint:CreateResiliencyPolicy' :: CreateResiliencyPolicy -> Maybe DataLocationConstraint
$sel:clientToken:CreateResiliencyPolicy' :: CreateResiliencyPolicy -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
clientToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DataLocationConstraint
dataLocationConstraint
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
policyDescription
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (Sensitive (HashMap Text Text))
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` HashMap DisruptionType FailurePolicy
policy
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
policyName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ResiliencyPolicyTier
tier

instance Prelude.NFData CreateResiliencyPolicy where
  rnf :: CreateResiliencyPolicy -> ()
rnf CreateResiliencyPolicy' {Maybe Text
Maybe (Sensitive (HashMap Text Text))
Maybe DataLocationConstraint
Text
HashMap DisruptionType FailurePolicy
ResiliencyPolicyTier
tier :: ResiliencyPolicyTier
policyName :: Text
policy :: HashMap DisruptionType FailurePolicy
tags :: Maybe (Sensitive (HashMap Text Text))
policyDescription :: Maybe Text
dataLocationConstraint :: Maybe DataLocationConstraint
clientToken :: Maybe Text
$sel:tier:CreateResiliencyPolicy' :: CreateResiliencyPolicy -> ResiliencyPolicyTier
$sel:policyName:CreateResiliencyPolicy' :: CreateResiliencyPolicy -> Text
$sel:policy:CreateResiliencyPolicy' :: CreateResiliencyPolicy -> HashMap DisruptionType FailurePolicy
$sel:tags:CreateResiliencyPolicy' :: CreateResiliencyPolicy -> Maybe (Sensitive (HashMap Text Text))
$sel:policyDescription:CreateResiliencyPolicy' :: CreateResiliencyPolicy -> Maybe Text
$sel:dataLocationConstraint:CreateResiliencyPolicy' :: CreateResiliencyPolicy -> Maybe DataLocationConstraint
$sel:clientToken:CreateResiliencyPolicy' :: CreateResiliencyPolicy -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
clientToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` 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 Text
policyDescription
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (Sensitive (HashMap Text Text))
tags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf HashMap DisruptionType FailurePolicy
policy
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
policyName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf ResiliencyPolicyTier
tier

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

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

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

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

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

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

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

instance
  Prelude.NFData
    CreateResiliencyPolicyResponse
  where
  rnf :: CreateResiliencyPolicyResponse -> ()
rnf CreateResiliencyPolicyResponse' {Int
ResiliencyPolicy
policy :: ResiliencyPolicy
httpStatus :: Int
$sel:policy:CreateResiliencyPolicyResponse' :: CreateResiliencyPolicyResponse -> ResiliencyPolicy
$sel:httpStatus:CreateResiliencyPolicyResponse' :: CreateResiliencyPolicyResponse -> 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