{-# 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.Glacier.DeleteVaultAccessPolicy
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- This operation deletes the access policy associated with the specified
-- vault. The operation is eventually consistent; that is, it might take
-- some time for Amazon S3 Glacier to completely remove the access policy,
-- and you might still see the effect of the policy for a short time after
-- you send the delete request.
--
-- This operation is idempotent. You can invoke delete multiple times, even
-- if there is no policy associated with the vault. For more information
-- about vault access policies, see
-- <https://docs.aws.amazon.com/amazonglacier/latest/dev/vault-access-policy.html Amazon Glacier Access Control with Vault Access Policies>.
module Amazonka.Glacier.DeleteVaultAccessPolicy
  ( -- * Creating a Request
    DeleteVaultAccessPolicy (..),
    newDeleteVaultAccessPolicy,

    -- * Request Lenses
    deleteVaultAccessPolicy_accountId,
    deleteVaultAccessPolicy_vaultName,

    -- * Destructuring the Response
    DeleteVaultAccessPolicyResponse (..),
    newDeleteVaultAccessPolicyResponse,
  )
where

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

-- | DeleteVaultAccessPolicy input.
--
-- /See:/ 'newDeleteVaultAccessPolicy' smart constructor.
data DeleteVaultAccessPolicy = DeleteVaultAccessPolicy'
  { -- | The @AccountId@ value is the AWS account ID of the account that owns the
    -- vault. You can either specify an AWS account ID or optionally a single
    -- \'@-@\' (hyphen), in which case Amazon S3 Glacier uses the AWS account
    -- ID associated with the credentials used to sign the request. If you use
    -- an account ID, do not include any hyphens (\'-\') in the ID.
    DeleteVaultAccessPolicy -> Text
accountId :: Prelude.Text,
    -- | The name of the vault.
    DeleteVaultAccessPolicy -> Text
vaultName :: Prelude.Text
  }
  deriving (DeleteVaultAccessPolicy -> DeleteVaultAccessPolicy -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteVaultAccessPolicy -> DeleteVaultAccessPolicy -> Bool
$c/= :: DeleteVaultAccessPolicy -> DeleteVaultAccessPolicy -> Bool
== :: DeleteVaultAccessPolicy -> DeleteVaultAccessPolicy -> Bool
$c== :: DeleteVaultAccessPolicy -> DeleteVaultAccessPolicy -> Bool
Prelude.Eq, ReadPrec [DeleteVaultAccessPolicy]
ReadPrec DeleteVaultAccessPolicy
Int -> ReadS DeleteVaultAccessPolicy
ReadS [DeleteVaultAccessPolicy]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteVaultAccessPolicy]
$creadListPrec :: ReadPrec [DeleteVaultAccessPolicy]
readPrec :: ReadPrec DeleteVaultAccessPolicy
$creadPrec :: ReadPrec DeleteVaultAccessPolicy
readList :: ReadS [DeleteVaultAccessPolicy]
$creadList :: ReadS [DeleteVaultAccessPolicy]
readsPrec :: Int -> ReadS DeleteVaultAccessPolicy
$creadsPrec :: Int -> ReadS DeleteVaultAccessPolicy
Prelude.Read, Int -> DeleteVaultAccessPolicy -> ShowS
[DeleteVaultAccessPolicy] -> ShowS
DeleteVaultAccessPolicy -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteVaultAccessPolicy] -> ShowS
$cshowList :: [DeleteVaultAccessPolicy] -> ShowS
show :: DeleteVaultAccessPolicy -> String
$cshow :: DeleteVaultAccessPolicy -> String
showsPrec :: Int -> DeleteVaultAccessPolicy -> ShowS
$cshowsPrec :: Int -> DeleteVaultAccessPolicy -> ShowS
Prelude.Show, forall x. Rep DeleteVaultAccessPolicy x -> DeleteVaultAccessPolicy
forall x. DeleteVaultAccessPolicy -> Rep DeleteVaultAccessPolicy x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DeleteVaultAccessPolicy x -> DeleteVaultAccessPolicy
$cfrom :: forall x. DeleteVaultAccessPolicy -> Rep DeleteVaultAccessPolicy x
Prelude.Generic)

-- |
-- Create a value of 'DeleteVaultAccessPolicy' 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:
--
-- 'accountId', 'deleteVaultAccessPolicy_accountId' - The @AccountId@ value is the AWS account ID of the account that owns the
-- vault. You can either specify an AWS account ID or optionally a single
-- \'@-@\' (hyphen), in which case Amazon S3 Glacier uses the AWS account
-- ID associated with the credentials used to sign the request. If you use
-- an account ID, do not include any hyphens (\'-\') in the ID.
--
-- 'vaultName', 'deleteVaultAccessPolicy_vaultName' - The name of the vault.
newDeleteVaultAccessPolicy ::
  -- | 'accountId'
  Prelude.Text ->
  -- | 'vaultName'
  Prelude.Text ->
  DeleteVaultAccessPolicy
newDeleteVaultAccessPolicy :: Text -> Text -> DeleteVaultAccessPolicy
newDeleteVaultAccessPolicy Text
pAccountId_ Text
pVaultName_ =
  DeleteVaultAccessPolicy'
    { $sel:accountId:DeleteVaultAccessPolicy' :: Text
accountId = Text
pAccountId_,
      $sel:vaultName:DeleteVaultAccessPolicy' :: Text
vaultName = Text
pVaultName_
    }

-- | The @AccountId@ value is the AWS account ID of the account that owns the
-- vault. You can either specify an AWS account ID or optionally a single
-- \'@-@\' (hyphen), in which case Amazon S3 Glacier uses the AWS account
-- ID associated with the credentials used to sign the request. If you use
-- an account ID, do not include any hyphens (\'-\') in the ID.
deleteVaultAccessPolicy_accountId :: Lens.Lens' DeleteVaultAccessPolicy Prelude.Text
deleteVaultAccessPolicy_accountId :: Lens' DeleteVaultAccessPolicy Text
deleteVaultAccessPolicy_accountId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteVaultAccessPolicy' {Text
accountId :: Text
$sel:accountId:DeleteVaultAccessPolicy' :: DeleteVaultAccessPolicy -> Text
accountId} -> Text
accountId) (\s :: DeleteVaultAccessPolicy
s@DeleteVaultAccessPolicy' {} Text
a -> DeleteVaultAccessPolicy
s {$sel:accountId:DeleteVaultAccessPolicy' :: Text
accountId = Text
a} :: DeleteVaultAccessPolicy)

-- | The name of the vault.
deleteVaultAccessPolicy_vaultName :: Lens.Lens' DeleteVaultAccessPolicy Prelude.Text
deleteVaultAccessPolicy_vaultName :: Lens' DeleteVaultAccessPolicy Text
deleteVaultAccessPolicy_vaultName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeleteVaultAccessPolicy' {Text
vaultName :: Text
$sel:vaultName:DeleteVaultAccessPolicy' :: DeleteVaultAccessPolicy -> Text
vaultName} -> Text
vaultName) (\s :: DeleteVaultAccessPolicy
s@DeleteVaultAccessPolicy' {} Text
a -> DeleteVaultAccessPolicy
s {$sel:vaultName:DeleteVaultAccessPolicy' :: Text
vaultName = Text
a} :: DeleteVaultAccessPolicy)

instance Core.AWSRequest DeleteVaultAccessPolicy where
  type
    AWSResponse DeleteVaultAccessPolicy =
      DeleteVaultAccessPolicyResponse
  request :: (Service -> Service)
-> DeleteVaultAccessPolicy -> Request DeleteVaultAccessPolicy
request Service -> Service
overrides =
    forall a. ByteString -> Request a -> Request a
Request.glacierVersionHeader (Service -> ByteString
Core.version Service
defaultService)
      forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a. ToRequest a => Service -> a -> Request a
Request.delete (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy DeleteVaultAccessPolicy
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DeleteVaultAccessPolicy)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
AWSResponse a
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveNull
      DeleteVaultAccessPolicyResponse
DeleteVaultAccessPolicyResponse'

instance Prelude.Hashable DeleteVaultAccessPolicy where
  hashWithSalt :: Int -> DeleteVaultAccessPolicy -> Int
hashWithSalt Int
_salt DeleteVaultAccessPolicy' {Text
vaultName :: Text
accountId :: Text
$sel:vaultName:DeleteVaultAccessPolicy' :: DeleteVaultAccessPolicy -> Text
$sel:accountId:DeleteVaultAccessPolicy' :: DeleteVaultAccessPolicy -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
accountId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
vaultName

instance Prelude.NFData DeleteVaultAccessPolicy where
  rnf :: DeleteVaultAccessPolicy -> ()
rnf DeleteVaultAccessPolicy' {Text
vaultName :: Text
accountId :: Text
$sel:vaultName:DeleteVaultAccessPolicy' :: DeleteVaultAccessPolicy -> Text
$sel:accountId:DeleteVaultAccessPolicy' :: DeleteVaultAccessPolicy -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
accountId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
vaultName

instance Data.ToHeaders DeleteVaultAccessPolicy where
  toHeaders :: DeleteVaultAccessPolicy -> [Header]
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

instance Data.ToPath DeleteVaultAccessPolicy where
  toPath :: DeleteVaultAccessPolicy -> ByteString
toPath DeleteVaultAccessPolicy' {Text
vaultName :: Text
accountId :: Text
$sel:vaultName:DeleteVaultAccessPolicy' :: DeleteVaultAccessPolicy -> Text
$sel:accountId:DeleteVaultAccessPolicy' :: DeleteVaultAccessPolicy -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
accountId,
        ByteString
"/vaults/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
vaultName,
        ByteString
"/access-policy"
      ]

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

-- | /See:/ 'newDeleteVaultAccessPolicyResponse' smart constructor.
data DeleteVaultAccessPolicyResponse = DeleteVaultAccessPolicyResponse'
  {
  }
  deriving (DeleteVaultAccessPolicyResponse
-> DeleteVaultAccessPolicyResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeleteVaultAccessPolicyResponse
-> DeleteVaultAccessPolicyResponse -> Bool
$c/= :: DeleteVaultAccessPolicyResponse
-> DeleteVaultAccessPolicyResponse -> Bool
== :: DeleteVaultAccessPolicyResponse
-> DeleteVaultAccessPolicyResponse -> Bool
$c== :: DeleteVaultAccessPolicyResponse
-> DeleteVaultAccessPolicyResponse -> Bool
Prelude.Eq, ReadPrec [DeleteVaultAccessPolicyResponse]
ReadPrec DeleteVaultAccessPolicyResponse
Int -> ReadS DeleteVaultAccessPolicyResponse
ReadS [DeleteVaultAccessPolicyResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeleteVaultAccessPolicyResponse]
$creadListPrec :: ReadPrec [DeleteVaultAccessPolicyResponse]
readPrec :: ReadPrec DeleteVaultAccessPolicyResponse
$creadPrec :: ReadPrec DeleteVaultAccessPolicyResponse
readList :: ReadS [DeleteVaultAccessPolicyResponse]
$creadList :: ReadS [DeleteVaultAccessPolicyResponse]
readsPrec :: Int -> ReadS DeleteVaultAccessPolicyResponse
$creadsPrec :: Int -> ReadS DeleteVaultAccessPolicyResponse
Prelude.Read, Int -> DeleteVaultAccessPolicyResponse -> ShowS
[DeleteVaultAccessPolicyResponse] -> ShowS
DeleteVaultAccessPolicyResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeleteVaultAccessPolicyResponse] -> ShowS
$cshowList :: [DeleteVaultAccessPolicyResponse] -> ShowS
show :: DeleteVaultAccessPolicyResponse -> String
$cshow :: DeleteVaultAccessPolicyResponse -> String
showsPrec :: Int -> DeleteVaultAccessPolicyResponse -> ShowS
$cshowsPrec :: Int -> DeleteVaultAccessPolicyResponse -> ShowS
Prelude.Show, forall x.
Rep DeleteVaultAccessPolicyResponse x
-> DeleteVaultAccessPolicyResponse
forall x.
DeleteVaultAccessPolicyResponse
-> Rep DeleteVaultAccessPolicyResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DeleteVaultAccessPolicyResponse x
-> DeleteVaultAccessPolicyResponse
$cfrom :: forall x.
DeleteVaultAccessPolicyResponse
-> Rep DeleteVaultAccessPolicyResponse x
Prelude.Generic)

-- |
-- Create a value of 'DeleteVaultAccessPolicyResponse' 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.
newDeleteVaultAccessPolicyResponse ::
  DeleteVaultAccessPolicyResponse
newDeleteVaultAccessPolicyResponse :: DeleteVaultAccessPolicyResponse
newDeleteVaultAccessPolicyResponse =
  DeleteVaultAccessPolicyResponse
DeleteVaultAccessPolicyResponse'

instance
  Prelude.NFData
    DeleteVaultAccessPolicyResponse
  where
  rnf :: DeleteVaultAccessPolicyResponse -> ()
rnf DeleteVaultAccessPolicyResponse
_ = ()