{-# 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.SecretsManager.DeleteSecret
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Deletes a secret and all of its versions. You can specify a recovery
-- window during which you can restore the secret. The minimum recovery
-- window is 7 days. The default recovery window is 30 days. Secrets
-- Manager attaches a @DeletionDate@ stamp to the secret that specifies the
-- end of the recovery window. At the end of the recovery window, Secrets
-- Manager deletes the secret permanently.
--
-- You can\'t delete a primary secret that is replicated to other Regions.
-- You must first delete the replicas using RemoveRegionsFromReplication,
-- and then delete the primary secret. When you delete a replica, it is
-- deleted immediately.
--
-- You can\'t directly delete a version of a secret. Instead, you remove
-- all staging labels from the version using UpdateSecretVersionStage. This
-- marks the version as deprecated, and then Secrets Manager can
-- automatically delete the version in the background.
--
-- To determine whether an application still uses a secret, you can create
-- an Amazon CloudWatch alarm to alert you to any attempts to access a
-- secret during the recovery window. For more information, see
-- <https://docs.aws.amazon.com/secretsmanager/latest/userguide/monitoring_cloudwatch_deleted-secrets.html Monitor secrets scheduled for deletion>.
--
-- Secrets Manager performs the permanent secret deletion at the end of the
-- waiting period as a background task with low priority. There is no
-- guarantee of a specific time after the recovery window for the permanent
-- delete to occur.
--
-- At any time before recovery window ends, you can use RestoreSecret to
-- remove the @DeletionDate@ and cancel the deletion of the secret.
--
-- When a secret is scheduled for deletion, you cannot retrieve the secret
-- value. You must first cancel the deletion with RestoreSecret and then
-- you can retrieve the secret.
--
-- Secrets Manager generates a CloudTrail log entry when you call this
-- action. Do not include sensitive information in request parameters
-- because it might be logged. For more information, see
-- <https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieve-ct-entries.html Logging Secrets Manager events with CloudTrail>.
--
-- __Required permissions:__ @secretsmanager:DeleteSecret@. For more
-- information, see
-- <https://docs.aws.amazon.com/secretsmanager/latest/userguide/reference_iam-permissions.html#reference_iam-permissions_actions IAM policy actions for Secrets Manager>
-- and
-- <https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access.html Authentication and access control in Secrets Manager>.
module Amazonka.SecretsManager.DeleteSecret
  ( -- * Creating a Request
    DeleteSecret (..),
    newDeleteSecret,

    -- * Request Lenses
    deleteSecret_forceDeleteWithoutRecovery,
    deleteSecret_recoveryWindowInDays,
    deleteSecret_secretId,

    -- * Destructuring the Response
    DeleteSecretResponse (..),
    newDeleteSecretResponse,

    -- * Response Lenses
    deleteSecretResponse_arn,
    deleteSecretResponse_deletionDate,
    deleteSecretResponse_name,
    deleteSecretResponse_httpStatus,
  )
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 qualified Amazonka.Response as Response
import Amazonka.SecretsManager.Types

-- | /See:/ 'newDeleteSecret' smart constructor.
data DeleteSecret = DeleteSecret'
  { -- | Specifies whether to delete the secret without any recovery window. You
    -- can\'t use both this parameter and @RecoveryWindowInDays@ in the same
    -- call. If you don\'t use either, then Secrets Manager defaults to a 30
    -- day recovery window.
    --
    -- Secrets Manager performs the actual deletion with an asynchronous
    -- background process, so there might be a short delay before the secret is
    -- permanently deleted. If you delete a secret and then immediately create
    -- a secret with the same name, use appropriate back off and retry logic.
    --
    -- Use this parameter with caution. This parameter causes the operation to
    -- skip the normal recovery window before the permanent deletion that
    -- Secrets Manager would normally impose with the @RecoveryWindowInDays@
    -- parameter. If you delete a secret with the @ForceDeleteWithoutRecovery@
    -- parameter, then you have no opportunity to recover the secret. You lose
    -- the secret permanently.
    DeleteSecret -> Maybe Bool
forceDeleteWithoutRecovery :: Prelude.Maybe Prelude.Bool,
    -- | The number of days from 7 to 30 that Secrets Manager waits before
    -- permanently deleting the secret. You can\'t use both this parameter and
    -- @ForceDeleteWithoutRecovery@ in the same call. If you don\'t use either,
    -- then Secrets Manager defaults to a 30 day recovery window.
    DeleteSecret -> Maybe Integer
recoveryWindowInDays :: Prelude.Maybe Prelude.Integer,
    -- | The ARN or name of the secret to delete.
    --
    -- For an ARN, we recommend that you specify a complete ARN rather than a
    -- partial ARN. See
    -- <https://docs.aws.amazon.com/secretsmanager/latest/userguide/troubleshoot.html#ARN_secretnamehyphen Finding a secret from a partial ARN>.
    DeleteSecret -> Text
secretId :: Prelude.Text
  }
  deriving (DeleteSecret -> DeleteSecret -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteSecret -> DeleteSecret -> Bool
$c/= :: DeleteSecret -> DeleteSecret -> Bool
== :: DeleteSecret -> DeleteSecret -> Bool
$c== :: DeleteSecret -> DeleteSecret -> Bool
Prelude.Eq, ReadPrec [DeleteSecret]
ReadPrec DeleteSecret
Int -> ReadS DeleteSecret
ReadS [DeleteSecret]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteSecret]
$creadListPrec :: ReadPrec [DeleteSecret]
readPrec :: ReadPrec DeleteSecret
$creadPrec :: ReadPrec DeleteSecret
readList :: ReadS [DeleteSecret]
$creadList :: ReadS [DeleteSecret]
readsPrec :: Int -> ReadS DeleteSecret
$creadsPrec :: Int -> ReadS DeleteSecret
Prelude.Read, Int -> DeleteSecret -> ShowS
[DeleteSecret] -> ShowS
DeleteSecret -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteSecret] -> ShowS
$cshowList :: [DeleteSecret] -> ShowS
show :: DeleteSecret -> String
$cshow :: DeleteSecret -> String
showsPrec :: Int -> DeleteSecret -> ShowS
$cshowsPrec :: Int -> DeleteSecret -> ShowS
Prelude.Show, forall x. Rep DeleteSecret x -> DeleteSecret
forall x. DeleteSecret -> Rep DeleteSecret x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteSecret x -> DeleteSecret
$cfrom :: forall x. DeleteSecret -> Rep DeleteSecret x
Prelude.Generic)

-- |
-- Create a value of 'DeleteSecret' 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:
--
-- 'forceDeleteWithoutRecovery', 'deleteSecret_forceDeleteWithoutRecovery' - Specifies whether to delete the secret without any recovery window. You
-- can\'t use both this parameter and @RecoveryWindowInDays@ in the same
-- call. If you don\'t use either, then Secrets Manager defaults to a 30
-- day recovery window.
--
-- Secrets Manager performs the actual deletion with an asynchronous
-- background process, so there might be a short delay before the secret is
-- permanently deleted. If you delete a secret and then immediately create
-- a secret with the same name, use appropriate back off and retry logic.
--
-- Use this parameter with caution. This parameter causes the operation to
-- skip the normal recovery window before the permanent deletion that
-- Secrets Manager would normally impose with the @RecoveryWindowInDays@
-- parameter. If you delete a secret with the @ForceDeleteWithoutRecovery@
-- parameter, then you have no opportunity to recover the secret. You lose
-- the secret permanently.
--
-- 'recoveryWindowInDays', 'deleteSecret_recoveryWindowInDays' - The number of days from 7 to 30 that Secrets Manager waits before
-- permanently deleting the secret. You can\'t use both this parameter and
-- @ForceDeleteWithoutRecovery@ in the same call. If you don\'t use either,
-- then Secrets Manager defaults to a 30 day recovery window.
--
-- 'secretId', 'deleteSecret_secretId' - The ARN or name of the secret to delete.
--
-- For an ARN, we recommend that you specify a complete ARN rather than a
-- partial ARN. See
-- <https://docs.aws.amazon.com/secretsmanager/latest/userguide/troubleshoot.html#ARN_secretnamehyphen Finding a secret from a partial ARN>.
newDeleteSecret ::
  -- | 'secretId'
  Prelude.Text ->
  DeleteSecret
newDeleteSecret :: Text -> DeleteSecret
newDeleteSecret Text
pSecretId_ =
  DeleteSecret'
    { $sel:forceDeleteWithoutRecovery:DeleteSecret' :: Maybe Bool
forceDeleteWithoutRecovery =
        forall a. Maybe a
Prelude.Nothing,
      $sel:recoveryWindowInDays:DeleteSecret' :: Maybe Integer
recoveryWindowInDays = forall a. Maybe a
Prelude.Nothing,
      $sel:secretId:DeleteSecret' :: Text
secretId = Text
pSecretId_
    }

-- | Specifies whether to delete the secret without any recovery window. You
-- can\'t use both this parameter and @RecoveryWindowInDays@ in the same
-- call. If you don\'t use either, then Secrets Manager defaults to a 30
-- day recovery window.
--
-- Secrets Manager performs the actual deletion with an asynchronous
-- background process, so there might be a short delay before the secret is
-- permanently deleted. If you delete a secret and then immediately create
-- a secret with the same name, use appropriate back off and retry logic.
--
-- Use this parameter with caution. This parameter causes the operation to
-- skip the normal recovery window before the permanent deletion that
-- Secrets Manager would normally impose with the @RecoveryWindowInDays@
-- parameter. If you delete a secret with the @ForceDeleteWithoutRecovery@
-- parameter, then you have no opportunity to recover the secret. You lose
-- the secret permanently.
deleteSecret_forceDeleteWithoutRecovery :: Lens.Lens' DeleteSecret (Prelude.Maybe Prelude.Bool)
deleteSecret_forceDeleteWithoutRecovery :: Lens' DeleteSecret (Maybe Bool)
deleteSecret_forceDeleteWithoutRecovery = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteSecret' {Maybe Bool
forceDeleteWithoutRecovery :: Maybe Bool
$sel:forceDeleteWithoutRecovery:DeleteSecret' :: DeleteSecret -> Maybe Bool
forceDeleteWithoutRecovery} -> Maybe Bool
forceDeleteWithoutRecovery) (\s :: DeleteSecret
s@DeleteSecret' {} Maybe Bool
a -> DeleteSecret
s {$sel:forceDeleteWithoutRecovery:DeleteSecret' :: Maybe Bool
forceDeleteWithoutRecovery = Maybe Bool
a} :: DeleteSecret)

-- | The number of days from 7 to 30 that Secrets Manager waits before
-- permanently deleting the secret. You can\'t use both this parameter and
-- @ForceDeleteWithoutRecovery@ in the same call. If you don\'t use either,
-- then Secrets Manager defaults to a 30 day recovery window.
deleteSecret_recoveryWindowInDays :: Lens.Lens' DeleteSecret (Prelude.Maybe Prelude.Integer)
deleteSecret_recoveryWindowInDays :: Lens' DeleteSecret (Maybe Integer)
deleteSecret_recoveryWindowInDays = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteSecret' {Maybe Integer
recoveryWindowInDays :: Maybe Integer
$sel:recoveryWindowInDays:DeleteSecret' :: DeleteSecret -> Maybe Integer
recoveryWindowInDays} -> Maybe Integer
recoveryWindowInDays) (\s :: DeleteSecret
s@DeleteSecret' {} Maybe Integer
a -> DeleteSecret
s {$sel:recoveryWindowInDays:DeleteSecret' :: Maybe Integer
recoveryWindowInDays = Maybe Integer
a} :: DeleteSecret)

-- | The ARN or name of the secret to delete.
--
-- For an ARN, we recommend that you specify a complete ARN rather than a
-- partial ARN. See
-- <https://docs.aws.amazon.com/secretsmanager/latest/userguide/troubleshoot.html#ARN_secretnamehyphen Finding a secret from a partial ARN>.
deleteSecret_secretId :: Lens.Lens' DeleteSecret Prelude.Text
deleteSecret_secretId :: Lens' DeleteSecret Text
deleteSecret_secretId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteSecret' {Text
secretId :: Text
$sel:secretId:DeleteSecret' :: DeleteSecret -> Text
secretId} -> Text
secretId) (\s :: DeleteSecret
s@DeleteSecret' {} Text
a -> DeleteSecret
s {$sel:secretId:DeleteSecret' :: Text
secretId = Text
a} :: DeleteSecret)

instance Core.AWSRequest DeleteSecret where
  type AWSResponse DeleteSecret = DeleteSecretResponse
  request :: (Service -> Service) -> DeleteSecret -> Request DeleteSecret
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 DeleteSecret
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse DeleteSecret)))
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 ->
          Maybe Text
-> Maybe POSIX -> Maybe Text -> Int -> DeleteSecretResponse
DeleteSecretResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"ARN")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"DeletionDate")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"Name")
            forall (f :: * -> *) a b. Applicative f => 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))
      )

instance Prelude.Hashable DeleteSecret where
  hashWithSalt :: Int -> DeleteSecret -> Int
hashWithSalt Int
_salt DeleteSecret' {Maybe Bool
Maybe Integer
Text
secretId :: Text
recoveryWindowInDays :: Maybe Integer
forceDeleteWithoutRecovery :: Maybe Bool
$sel:secretId:DeleteSecret' :: DeleteSecret -> Text
$sel:recoveryWindowInDays:DeleteSecret' :: DeleteSecret -> Maybe Integer
$sel:forceDeleteWithoutRecovery:DeleteSecret' :: DeleteSecret -> Maybe Bool
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
forceDeleteWithoutRecovery
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Integer
recoveryWindowInDays
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
secretId

instance Prelude.NFData DeleteSecret where
  rnf :: DeleteSecret -> ()
rnf DeleteSecret' {Maybe Bool
Maybe Integer
Text
secretId :: Text
recoveryWindowInDays :: Maybe Integer
forceDeleteWithoutRecovery :: Maybe Bool
$sel:secretId:DeleteSecret' :: DeleteSecret -> Text
$sel:recoveryWindowInDays:DeleteSecret' :: DeleteSecret -> Maybe Integer
$sel:forceDeleteWithoutRecovery:DeleteSecret' :: DeleteSecret -> Maybe Bool
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
forceDeleteWithoutRecovery
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Integer
recoveryWindowInDays
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
secretId

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

instance Data.ToJSON DeleteSecret where
  toJSON :: DeleteSecret -> Value
toJSON DeleteSecret' {Maybe Bool
Maybe Integer
Text
secretId :: Text
recoveryWindowInDays :: Maybe Integer
forceDeleteWithoutRecovery :: Maybe Bool
$sel:secretId:DeleteSecret' :: DeleteSecret -> Text
$sel:recoveryWindowInDays:DeleteSecret' :: DeleteSecret -> Maybe Integer
$sel:forceDeleteWithoutRecovery:DeleteSecret' :: DeleteSecret -> Maybe Bool
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"ForceDeleteWithoutRecovery" 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
forceDeleteWithoutRecovery,
            (Key
"RecoveryWindowInDays" 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 Integer
recoveryWindowInDays,
            forall a. a -> Maybe a
Prelude.Just (Key
"SecretId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
secretId)
          ]
      )

instance Data.ToPath DeleteSecret where
  toPath :: DeleteSecret -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/"

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

-- | /See:/ 'newDeleteSecretResponse' smart constructor.
data DeleteSecretResponse = DeleteSecretResponse'
  { -- | The ARN of the secret.
    DeleteSecretResponse -> Maybe Text
arn :: Prelude.Maybe Prelude.Text,
    -- | The date and time after which this secret Secrets Manager can
    -- permanently delete this secret, and it can no longer be restored. This
    -- value is the date and time of the delete request plus the number of days
    -- in @RecoveryWindowInDays@.
    DeleteSecretResponse -> Maybe POSIX
deletionDate :: Prelude.Maybe Data.POSIX,
    -- | The name of the secret.
    DeleteSecretResponse -> Maybe Text
name :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    DeleteSecretResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DeleteSecretResponse -> DeleteSecretResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteSecretResponse -> DeleteSecretResponse -> Bool
$c/= :: DeleteSecretResponse -> DeleteSecretResponse -> Bool
== :: DeleteSecretResponse -> DeleteSecretResponse -> Bool
$c== :: DeleteSecretResponse -> DeleteSecretResponse -> Bool
Prelude.Eq, ReadPrec [DeleteSecretResponse]
ReadPrec DeleteSecretResponse
Int -> ReadS DeleteSecretResponse
ReadS [DeleteSecretResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteSecretResponse]
$creadListPrec :: ReadPrec [DeleteSecretResponse]
readPrec :: ReadPrec DeleteSecretResponse
$creadPrec :: ReadPrec DeleteSecretResponse
readList :: ReadS [DeleteSecretResponse]
$creadList :: ReadS [DeleteSecretResponse]
readsPrec :: Int -> ReadS DeleteSecretResponse
$creadsPrec :: Int -> ReadS DeleteSecretResponse
Prelude.Read, Int -> DeleteSecretResponse -> ShowS
[DeleteSecretResponse] -> ShowS
DeleteSecretResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteSecretResponse] -> ShowS
$cshowList :: [DeleteSecretResponse] -> ShowS
show :: DeleteSecretResponse -> String
$cshow :: DeleteSecretResponse -> String
showsPrec :: Int -> DeleteSecretResponse -> ShowS
$cshowsPrec :: Int -> DeleteSecretResponse -> ShowS
Prelude.Show, forall x. Rep DeleteSecretResponse x -> DeleteSecretResponse
forall x. DeleteSecretResponse -> Rep DeleteSecretResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteSecretResponse x -> DeleteSecretResponse
$cfrom :: forall x. DeleteSecretResponse -> Rep DeleteSecretResponse x
Prelude.Generic)

-- |
-- Create a value of 'DeleteSecretResponse' 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:
--
-- 'arn', 'deleteSecretResponse_arn' - The ARN of the secret.
--
-- 'deletionDate', 'deleteSecretResponse_deletionDate' - The date and time after which this secret Secrets Manager can
-- permanently delete this secret, and it can no longer be restored. This
-- value is the date and time of the delete request plus the number of days
-- in @RecoveryWindowInDays@.
--
-- 'name', 'deleteSecretResponse_name' - The name of the secret.
--
-- 'httpStatus', 'deleteSecretResponse_httpStatus' - The response's http status code.
newDeleteSecretResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DeleteSecretResponse
newDeleteSecretResponse :: Int -> DeleteSecretResponse
newDeleteSecretResponse Int
pHttpStatus_ =
  DeleteSecretResponse'
    { $sel:arn:DeleteSecretResponse' :: Maybe Text
arn = forall a. Maybe a
Prelude.Nothing,
      $sel:deletionDate:DeleteSecretResponse' :: Maybe POSIX
deletionDate = forall a. Maybe a
Prelude.Nothing,
      $sel:name:DeleteSecretResponse' :: Maybe Text
name = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DeleteSecretResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The ARN of the secret.
deleteSecretResponse_arn :: Lens.Lens' DeleteSecretResponse (Prelude.Maybe Prelude.Text)
deleteSecretResponse_arn :: Lens' DeleteSecretResponse (Maybe Text)
deleteSecretResponse_arn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteSecretResponse' {Maybe Text
arn :: Maybe Text
$sel:arn:DeleteSecretResponse' :: DeleteSecretResponse -> Maybe Text
arn} -> Maybe Text
arn) (\s :: DeleteSecretResponse
s@DeleteSecretResponse' {} Maybe Text
a -> DeleteSecretResponse
s {$sel:arn:DeleteSecretResponse' :: Maybe Text
arn = Maybe Text
a} :: DeleteSecretResponse)

-- | The date and time after which this secret Secrets Manager can
-- permanently delete this secret, and it can no longer be restored. This
-- value is the date and time of the delete request plus the number of days
-- in @RecoveryWindowInDays@.
deleteSecretResponse_deletionDate :: Lens.Lens' DeleteSecretResponse (Prelude.Maybe Prelude.UTCTime)
deleteSecretResponse_deletionDate :: Lens' DeleteSecretResponse (Maybe UTCTime)
deleteSecretResponse_deletionDate = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteSecretResponse' {Maybe POSIX
deletionDate :: Maybe POSIX
$sel:deletionDate:DeleteSecretResponse' :: DeleteSecretResponse -> Maybe POSIX
deletionDate} -> Maybe POSIX
deletionDate) (\s :: DeleteSecretResponse
s@DeleteSecretResponse' {} Maybe POSIX
a -> DeleteSecretResponse
s {$sel:deletionDate:DeleteSecretResponse' :: Maybe POSIX
deletionDate = Maybe POSIX
a} :: DeleteSecretResponse) 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 :: Format). Iso' (Time a) UTCTime
Data._Time

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

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

instance Prelude.NFData DeleteSecretResponse where
  rnf :: DeleteSecretResponse -> ()
rnf DeleteSecretResponse' {Int
Maybe Text
Maybe POSIX
httpStatus :: Int
name :: Maybe Text
deletionDate :: Maybe POSIX
arn :: Maybe Text
$sel:httpStatus:DeleteSecretResponse' :: DeleteSecretResponse -> Int
$sel:name:DeleteSecretResponse' :: DeleteSecretResponse -> Maybe Text
$sel:deletionDate:DeleteSecretResponse' :: DeleteSecretResponse -> Maybe POSIX
$sel:arn:DeleteSecretResponse' :: DeleteSecretResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
arn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
deletionDate
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
name
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus