{-# 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.SES.SetActiveReceiptRuleSet
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Sets the specified receipt rule set as the active receipt rule set.
--
-- To disable your email-receiving through Amazon SES completely, you can
-- call this API with RuleSetName set to null.
--
-- For information about managing receipt rule sets, see the
-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/receiving-email-managing-receipt-rule-sets.html Amazon SES Developer Guide>.
--
-- You can execute this operation no more than once per second.
module Amazonka.SES.SetActiveReceiptRuleSet
  ( -- * Creating a Request
    SetActiveReceiptRuleSet (..),
    newSetActiveReceiptRuleSet,

    -- * Request Lenses
    setActiveReceiptRuleSet_ruleSetName,

    -- * Destructuring the Response
    SetActiveReceiptRuleSetResponse (..),
    newSetActiveReceiptRuleSetResponse,

    -- * Response Lenses
    setActiveReceiptRuleSetResponse_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.SES.Types

-- | Represents a request to set a receipt rule set as the active receipt
-- rule set. You use receipt rule sets to receive email with Amazon SES.
-- For more information, see the
-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/receiving-email-concepts.html Amazon SES Developer Guide>.
--
-- /See:/ 'newSetActiveReceiptRuleSet' smart constructor.
data SetActiveReceiptRuleSet = SetActiveReceiptRuleSet'
  { -- | The name of the receipt rule set to make active. Setting this value to
    -- null disables all email receiving.
    SetActiveReceiptRuleSet -> Maybe Text
ruleSetName :: Prelude.Maybe Prelude.Text
  }
  deriving (SetActiveReceiptRuleSet -> SetActiveReceiptRuleSet -> Bool
(SetActiveReceiptRuleSet -> SetActiveReceiptRuleSet -> Bool)
-> (SetActiveReceiptRuleSet -> SetActiveReceiptRuleSet -> Bool)
-> Eq SetActiveReceiptRuleSet
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SetActiveReceiptRuleSet -> SetActiveReceiptRuleSet -> Bool
== :: SetActiveReceiptRuleSet -> SetActiveReceiptRuleSet -> Bool
$c/= :: SetActiveReceiptRuleSet -> SetActiveReceiptRuleSet -> Bool
/= :: SetActiveReceiptRuleSet -> SetActiveReceiptRuleSet -> Bool
Prelude.Eq, ReadPrec [SetActiveReceiptRuleSet]
ReadPrec SetActiveReceiptRuleSet
Int -> ReadS SetActiveReceiptRuleSet
ReadS [SetActiveReceiptRuleSet]
(Int -> ReadS SetActiveReceiptRuleSet)
-> ReadS [SetActiveReceiptRuleSet]
-> ReadPrec SetActiveReceiptRuleSet
-> ReadPrec [SetActiveReceiptRuleSet]
-> Read SetActiveReceiptRuleSet
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS SetActiveReceiptRuleSet
readsPrec :: Int -> ReadS SetActiveReceiptRuleSet
$creadList :: ReadS [SetActiveReceiptRuleSet]
readList :: ReadS [SetActiveReceiptRuleSet]
$creadPrec :: ReadPrec SetActiveReceiptRuleSet
readPrec :: ReadPrec SetActiveReceiptRuleSet
$creadListPrec :: ReadPrec [SetActiveReceiptRuleSet]
readListPrec :: ReadPrec [SetActiveReceiptRuleSet]
Prelude.Read, Int -> SetActiveReceiptRuleSet -> ShowS
[SetActiveReceiptRuleSet] -> ShowS
SetActiveReceiptRuleSet -> String
(Int -> SetActiveReceiptRuleSet -> ShowS)
-> (SetActiveReceiptRuleSet -> String)
-> ([SetActiveReceiptRuleSet] -> ShowS)
-> Show SetActiveReceiptRuleSet
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SetActiveReceiptRuleSet -> ShowS
showsPrec :: Int -> SetActiveReceiptRuleSet -> ShowS
$cshow :: SetActiveReceiptRuleSet -> String
show :: SetActiveReceiptRuleSet -> String
$cshowList :: [SetActiveReceiptRuleSet] -> ShowS
showList :: [SetActiveReceiptRuleSet] -> ShowS
Prelude.Show, (forall x.
 SetActiveReceiptRuleSet -> Rep SetActiveReceiptRuleSet x)
-> (forall x.
    Rep SetActiveReceiptRuleSet x -> SetActiveReceiptRuleSet)
-> Generic SetActiveReceiptRuleSet
forall x. Rep SetActiveReceiptRuleSet x -> SetActiveReceiptRuleSet
forall x. SetActiveReceiptRuleSet -> Rep SetActiveReceiptRuleSet x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. SetActiveReceiptRuleSet -> Rep SetActiveReceiptRuleSet x
from :: forall x. SetActiveReceiptRuleSet -> Rep SetActiveReceiptRuleSet x
$cto :: forall x. Rep SetActiveReceiptRuleSet x -> SetActiveReceiptRuleSet
to :: forall x. Rep SetActiveReceiptRuleSet x -> SetActiveReceiptRuleSet
Prelude.Generic)

-- |
-- Create a value of 'SetActiveReceiptRuleSet' 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:
--
-- 'ruleSetName', 'setActiveReceiptRuleSet_ruleSetName' - The name of the receipt rule set to make active. Setting this value to
-- null disables all email receiving.
newSetActiveReceiptRuleSet ::
  SetActiveReceiptRuleSet
newSetActiveReceiptRuleSet :: SetActiveReceiptRuleSet
newSetActiveReceiptRuleSet =
  SetActiveReceiptRuleSet'
    { $sel:ruleSetName:SetActiveReceiptRuleSet' :: Maybe Text
ruleSetName =
        Maybe Text
forall a. Maybe a
Prelude.Nothing
    }

-- | The name of the receipt rule set to make active. Setting this value to
-- null disables all email receiving.
setActiveReceiptRuleSet_ruleSetName :: Lens.Lens' SetActiveReceiptRuleSet (Prelude.Maybe Prelude.Text)
setActiveReceiptRuleSet_ruleSetName :: Lens' SetActiveReceiptRuleSet (Maybe Text)
setActiveReceiptRuleSet_ruleSetName = (SetActiveReceiptRuleSet -> Maybe Text)
-> (SetActiveReceiptRuleSet
    -> Maybe Text -> SetActiveReceiptRuleSet)
-> Lens' SetActiveReceiptRuleSet (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SetActiveReceiptRuleSet' {Maybe Text
$sel:ruleSetName:SetActiveReceiptRuleSet' :: SetActiveReceiptRuleSet -> Maybe Text
ruleSetName :: Maybe Text
ruleSetName} -> Maybe Text
ruleSetName) (\s :: SetActiveReceiptRuleSet
s@SetActiveReceiptRuleSet' {} Maybe Text
a -> SetActiveReceiptRuleSet
s {ruleSetName = a} :: SetActiveReceiptRuleSet)

instance Core.AWSRequest SetActiveReceiptRuleSet where
  type
    AWSResponse SetActiveReceiptRuleSet =
      SetActiveReceiptRuleSetResponse
  request :: (Service -> Service)
-> SetActiveReceiptRuleSet -> Request SetActiveReceiptRuleSet
request Service -> Service
overrides =
    Service
-> SetActiveReceiptRuleSet -> Request SetActiveReceiptRuleSet
forall a. ToRequest a => Service -> a -> Request a
Request.postQuery (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy SetActiveReceiptRuleSet
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse SetActiveReceiptRuleSet)))
response =
    Text
-> (Int
    -> ResponseHeaders
    -> [Node]
    -> Either String (AWSResponse SetActiveReceiptRuleSet))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy SetActiveReceiptRuleSet
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse SetActiveReceiptRuleSet)))
forall (m :: * -> *) a.
MonadResource m =>
Text
-> (Int
    -> ResponseHeaders -> [Node] -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveXMLWrapper
      Text
"SetActiveReceiptRuleSetResult"
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Int -> SetActiveReceiptRuleSetResponse
SetActiveReceiptRuleSetResponse'
            (Int -> SetActiveReceiptRuleSetResponse)
-> Either String Int
-> Either String SetActiveReceiptRuleSetResponse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Int -> Either String Int
forall a. a -> Either String a
forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (Int -> Int
forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance Prelude.Hashable SetActiveReceiptRuleSet where
  hashWithSalt :: Int -> SetActiveReceiptRuleSet -> Int
hashWithSalt Int
_salt SetActiveReceiptRuleSet' {Maybe Text
$sel:ruleSetName:SetActiveReceiptRuleSet' :: SetActiveReceiptRuleSet -> Maybe Text
ruleSetName :: Maybe Text
..} =
    Int
_salt Int -> Maybe Text -> Int
forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
ruleSetName

instance Prelude.NFData SetActiveReceiptRuleSet where
  rnf :: SetActiveReceiptRuleSet -> ()
rnf SetActiveReceiptRuleSet' {Maybe Text
$sel:ruleSetName:SetActiveReceiptRuleSet' :: SetActiveReceiptRuleSet -> Maybe Text
ruleSetName :: Maybe Text
..} =
    Maybe Text -> ()
forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
ruleSetName

instance Data.ToHeaders SetActiveReceiptRuleSet where
  toHeaders :: SetActiveReceiptRuleSet -> ResponseHeaders
toHeaders = ResponseHeaders -> SetActiveReceiptRuleSet -> ResponseHeaders
forall a b. a -> b -> a
Prelude.const ResponseHeaders
forall a. Monoid a => a
Prelude.mempty

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

instance Data.ToQuery SetActiveReceiptRuleSet where
  toQuery :: SetActiveReceiptRuleSet -> QueryString
toQuery SetActiveReceiptRuleSet' {Maybe Text
$sel:ruleSetName:SetActiveReceiptRuleSet' :: SetActiveReceiptRuleSet -> Maybe Text
ruleSetName :: Maybe Text
..} =
    [QueryString] -> QueryString
forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          ByteString -> ByteString -> QueryString
forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"SetActiveReceiptRuleSet" :: Prelude.ByteString),
        ByteString
"Version"
          ByteString -> ByteString -> QueryString
forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2010-12-01" :: Prelude.ByteString),
        ByteString
"RuleSetName" ByteString -> Maybe Text -> QueryString
forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
ruleSetName
      ]

-- | An empty element returned on a successful request.
--
-- /See:/ 'newSetActiveReceiptRuleSetResponse' smart constructor.
data SetActiveReceiptRuleSetResponse = SetActiveReceiptRuleSetResponse'
  { -- | The response's http status code.
    SetActiveReceiptRuleSetResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (SetActiveReceiptRuleSetResponse
-> SetActiveReceiptRuleSetResponse -> Bool
(SetActiveReceiptRuleSetResponse
 -> SetActiveReceiptRuleSetResponse -> Bool)
-> (SetActiveReceiptRuleSetResponse
    -> SetActiveReceiptRuleSetResponse -> Bool)
-> Eq SetActiveReceiptRuleSetResponse
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SetActiveReceiptRuleSetResponse
-> SetActiveReceiptRuleSetResponse -> Bool
== :: SetActiveReceiptRuleSetResponse
-> SetActiveReceiptRuleSetResponse -> Bool
$c/= :: SetActiveReceiptRuleSetResponse
-> SetActiveReceiptRuleSetResponse -> Bool
/= :: SetActiveReceiptRuleSetResponse
-> SetActiveReceiptRuleSetResponse -> Bool
Prelude.Eq, ReadPrec [SetActiveReceiptRuleSetResponse]
ReadPrec SetActiveReceiptRuleSetResponse
Int -> ReadS SetActiveReceiptRuleSetResponse
ReadS [SetActiveReceiptRuleSetResponse]
(Int -> ReadS SetActiveReceiptRuleSetResponse)
-> ReadS [SetActiveReceiptRuleSetResponse]
-> ReadPrec SetActiveReceiptRuleSetResponse
-> ReadPrec [SetActiveReceiptRuleSetResponse]
-> Read SetActiveReceiptRuleSetResponse
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS SetActiveReceiptRuleSetResponse
readsPrec :: Int -> ReadS SetActiveReceiptRuleSetResponse
$creadList :: ReadS [SetActiveReceiptRuleSetResponse]
readList :: ReadS [SetActiveReceiptRuleSetResponse]
$creadPrec :: ReadPrec SetActiveReceiptRuleSetResponse
readPrec :: ReadPrec SetActiveReceiptRuleSetResponse
$creadListPrec :: ReadPrec [SetActiveReceiptRuleSetResponse]
readListPrec :: ReadPrec [SetActiveReceiptRuleSetResponse]
Prelude.Read, Int -> SetActiveReceiptRuleSetResponse -> ShowS
[SetActiveReceiptRuleSetResponse] -> ShowS
SetActiveReceiptRuleSetResponse -> String
(Int -> SetActiveReceiptRuleSetResponse -> ShowS)
-> (SetActiveReceiptRuleSetResponse -> String)
-> ([SetActiveReceiptRuleSetResponse] -> ShowS)
-> Show SetActiveReceiptRuleSetResponse
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SetActiveReceiptRuleSetResponse -> ShowS
showsPrec :: Int -> SetActiveReceiptRuleSetResponse -> ShowS
$cshow :: SetActiveReceiptRuleSetResponse -> String
show :: SetActiveReceiptRuleSetResponse -> String
$cshowList :: [SetActiveReceiptRuleSetResponse] -> ShowS
showList :: [SetActiveReceiptRuleSetResponse] -> ShowS
Prelude.Show, (forall x.
 SetActiveReceiptRuleSetResponse
 -> Rep SetActiveReceiptRuleSetResponse x)
-> (forall x.
    Rep SetActiveReceiptRuleSetResponse x
    -> SetActiveReceiptRuleSetResponse)
-> Generic SetActiveReceiptRuleSetResponse
forall x.
Rep SetActiveReceiptRuleSetResponse x
-> SetActiveReceiptRuleSetResponse
forall x.
SetActiveReceiptRuleSetResponse
-> Rep SetActiveReceiptRuleSetResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x.
SetActiveReceiptRuleSetResponse
-> Rep SetActiveReceiptRuleSetResponse x
from :: forall x.
SetActiveReceiptRuleSetResponse
-> Rep SetActiveReceiptRuleSetResponse x
$cto :: forall x.
Rep SetActiveReceiptRuleSetResponse x
-> SetActiveReceiptRuleSetResponse
to :: forall x.
Rep SetActiveReceiptRuleSetResponse x
-> SetActiveReceiptRuleSetResponse
Prelude.Generic)

-- |
-- Create a value of 'SetActiveReceiptRuleSetResponse' 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', 'setActiveReceiptRuleSetResponse_httpStatus' - The response's http status code.
newSetActiveReceiptRuleSetResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  SetActiveReceiptRuleSetResponse
newSetActiveReceiptRuleSetResponse :: Int -> SetActiveReceiptRuleSetResponse
newSetActiveReceiptRuleSetResponse Int
pHttpStatus_ =
  SetActiveReceiptRuleSetResponse'
    { $sel:httpStatus:SetActiveReceiptRuleSetResponse' :: Int
httpStatus =
        Int
pHttpStatus_
    }

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

instance
  Prelude.NFData
    SetActiveReceiptRuleSetResponse
  where
  rnf :: SetActiveReceiptRuleSetResponse -> ()
rnf SetActiveReceiptRuleSetResponse' {Int
$sel:httpStatus:SetActiveReceiptRuleSetResponse' :: SetActiveReceiptRuleSetResponse -> Int
httpStatus :: Int
..} =
    Int -> ()
forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus