{-# 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.SetDataRetrievalPolicy
-- 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 sets and then enacts a data retrieval policy in the
-- region specified in the PUT request. You can set one policy per region
-- for an AWS account. The policy is enacted within a few minutes of a
-- successful PUT operation.
--
-- The set policy operation does not affect retrieval jobs that were in
-- progress before the policy was enacted. For more information about data
-- retrieval policies, see
-- <https://docs.aws.amazon.com/amazonglacier/latest/dev/data-retrieval-policy.html Amazon Glacier Data Retrieval Policies>.
module Amazonka.Glacier.SetDataRetrievalPolicy
  ( -- * Creating a Request
    SetDataRetrievalPolicy (..),
    newSetDataRetrievalPolicy,

    -- * Request Lenses
    setDataRetrievalPolicy_policy,
    setDataRetrievalPolicy_accountId,

    -- * Destructuring the Response
    SetDataRetrievalPolicyResponse (..),
    newSetDataRetrievalPolicyResponse,
  )
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

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

-- |
-- Create a value of 'SetDataRetrievalPolicy' 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:
--
-- 'policy', 'setDataRetrievalPolicy_policy' - The data retrieval policy in JSON format.
--
-- 'accountId', 'setDataRetrievalPolicy_accountId' - The @AccountId@ value is the AWS account ID. This value must match the
-- AWS account ID associated with the credentials used to sign the request.
-- You can either specify an AWS account ID or optionally a single \'@-@\'
-- (hyphen), in which case Amazon Glacier uses the AWS account ID
-- associated with the credentials used to sign the request. If you specify
-- your account ID, do not include any hyphens (\'-\') in the ID.
newSetDataRetrievalPolicy ::
  -- | 'accountId'
  Prelude.Text ->
  SetDataRetrievalPolicy
newSetDataRetrievalPolicy :: Text -> SetDataRetrievalPolicy
newSetDataRetrievalPolicy Text
pAccountId_ =
  SetDataRetrievalPolicy'
    { $sel:policy:SetDataRetrievalPolicy' :: Maybe DataRetrievalPolicy
policy = forall a. Maybe a
Prelude.Nothing,
      $sel:accountId:SetDataRetrievalPolicy' :: Text
accountId = Text
pAccountId_
    }

-- | The data retrieval policy in JSON format.
setDataRetrievalPolicy_policy :: Lens.Lens' SetDataRetrievalPolicy (Prelude.Maybe DataRetrievalPolicy)
setDataRetrievalPolicy_policy :: Lens' SetDataRetrievalPolicy (Maybe DataRetrievalPolicy)
setDataRetrievalPolicy_policy = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SetDataRetrievalPolicy' {Maybe DataRetrievalPolicy
policy :: Maybe DataRetrievalPolicy
$sel:policy:SetDataRetrievalPolicy' :: SetDataRetrievalPolicy -> Maybe DataRetrievalPolicy
policy} -> Maybe DataRetrievalPolicy
policy) (\s :: SetDataRetrievalPolicy
s@SetDataRetrievalPolicy' {} Maybe DataRetrievalPolicy
a -> SetDataRetrievalPolicy
s {$sel:policy:SetDataRetrievalPolicy' :: Maybe DataRetrievalPolicy
policy = Maybe DataRetrievalPolicy
a} :: SetDataRetrievalPolicy)

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

instance Core.AWSRequest SetDataRetrievalPolicy where
  type
    AWSResponse SetDataRetrievalPolicy =
      SetDataRetrievalPolicyResponse
  request :: (Service -> Service)
-> SetDataRetrievalPolicy -> Request SetDataRetrievalPolicy
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, ToJSON a) => Service -> a -> Request a
Request.putJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy SetDataRetrievalPolicy
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse SetDataRetrievalPolicy)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
AWSResponse a
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveNull
      SetDataRetrievalPolicyResponse
SetDataRetrievalPolicyResponse'

instance Prelude.Hashable SetDataRetrievalPolicy where
  hashWithSalt :: Int -> SetDataRetrievalPolicy -> Int
hashWithSalt Int
_salt SetDataRetrievalPolicy' {Maybe DataRetrievalPolicy
Text
accountId :: Text
policy :: Maybe DataRetrievalPolicy
$sel:accountId:SetDataRetrievalPolicy' :: SetDataRetrievalPolicy -> Text
$sel:policy:SetDataRetrievalPolicy' :: SetDataRetrievalPolicy -> Maybe DataRetrievalPolicy
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DataRetrievalPolicy
policy
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
accountId

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

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

instance Data.ToJSON SetDataRetrievalPolicy where
  toJSON :: SetDataRetrievalPolicy -> Value
toJSON SetDataRetrievalPolicy' {Maybe DataRetrievalPolicy
Text
accountId :: Text
policy :: Maybe DataRetrievalPolicy
$sel:accountId:SetDataRetrievalPolicy' :: SetDataRetrievalPolicy -> Text
$sel:policy:SetDataRetrievalPolicy' :: SetDataRetrievalPolicy -> Maybe DataRetrievalPolicy
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [(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 DataRetrievalPolicy
policy]
      )

instance Data.ToPath SetDataRetrievalPolicy where
  toPath :: SetDataRetrievalPolicy -> ByteString
toPath SetDataRetrievalPolicy' {Maybe DataRetrievalPolicy
Text
accountId :: Text
policy :: Maybe DataRetrievalPolicy
$sel:accountId:SetDataRetrievalPolicy' :: SetDataRetrievalPolicy -> Text
$sel:policy:SetDataRetrievalPolicy' :: SetDataRetrievalPolicy -> Maybe DataRetrievalPolicy
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
accountId,
        ByteString
"/policies/data-retrieval"
      ]

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

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

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

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