{-# 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.UpdateConfigurationSetEventDestination
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Updates the event destination of a configuration set. Event destinations
-- are associated with configuration sets, which enable you to publish
-- email sending events to Amazon CloudWatch, Amazon Kinesis Firehose, or
-- Amazon Simple Notification Service (Amazon SNS). For information about
-- using configuration sets, see
-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/monitor-sending-activity.html Monitoring Your Amazon SES Sending Activity>
-- in the /Amazon SES Developer Guide./
--
-- When you create or update an event destination, you must provide one,
-- and only one, destination. The destination can be Amazon CloudWatch,
-- Amazon Kinesis Firehose, or Amazon Simple Notification Service (Amazon
-- SNS).
--
-- You can execute this operation no more than once per second.
module Amazonka.SES.UpdateConfigurationSetEventDestination
  ( -- * Creating a Request
    UpdateConfigurationSetEventDestination (..),
    newUpdateConfigurationSetEventDestination,

    -- * Request Lenses
    updateConfigurationSetEventDestination_configurationSetName,
    updateConfigurationSetEventDestination_eventDestination,

    -- * Destructuring the Response
    UpdateConfigurationSetEventDestinationResponse (..),
    newUpdateConfigurationSetEventDestinationResponse,

    -- * Response Lenses
    updateConfigurationSetEventDestinationResponse_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 update the event destination of a configuration
-- set. Configuration sets enable you to publish email sending events. For
-- information about using configuration sets, see the
-- <https://docs.aws.amazon.com/ses/latest/DeveloperGuide/monitor-sending-activity.html Amazon SES Developer Guide>.
--
-- /See:/ 'newUpdateConfigurationSetEventDestination' smart constructor.
data UpdateConfigurationSetEventDestination = UpdateConfigurationSetEventDestination'
  { -- | The name of the configuration set that contains the event destination
    -- that you want to update.
    UpdateConfigurationSetEventDestination -> Text
configurationSetName :: Prelude.Text,
    -- | The event destination object that you want to apply to the specified
    -- configuration set.
    UpdateConfigurationSetEventDestination -> EventDestination
eventDestination :: EventDestination
  }
  deriving (UpdateConfigurationSetEventDestination
-> UpdateConfigurationSetEventDestination -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateConfigurationSetEventDestination
-> UpdateConfigurationSetEventDestination -> Bool
$c/= :: UpdateConfigurationSetEventDestination
-> UpdateConfigurationSetEventDestination -> Bool
== :: UpdateConfigurationSetEventDestination
-> UpdateConfigurationSetEventDestination -> Bool
$c== :: UpdateConfigurationSetEventDestination
-> UpdateConfigurationSetEventDestination -> Bool
Prelude.Eq, ReadPrec [UpdateConfigurationSetEventDestination]
ReadPrec UpdateConfigurationSetEventDestination
Int -> ReadS UpdateConfigurationSetEventDestination
ReadS [UpdateConfigurationSetEventDestination]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateConfigurationSetEventDestination]
$creadListPrec :: ReadPrec [UpdateConfigurationSetEventDestination]
readPrec :: ReadPrec UpdateConfigurationSetEventDestination
$creadPrec :: ReadPrec UpdateConfigurationSetEventDestination
readList :: ReadS [UpdateConfigurationSetEventDestination]
$creadList :: ReadS [UpdateConfigurationSetEventDestination]
readsPrec :: Int -> ReadS UpdateConfigurationSetEventDestination
$creadsPrec :: Int -> ReadS UpdateConfigurationSetEventDestination
Prelude.Read, Int -> UpdateConfigurationSetEventDestination -> ShowS
[UpdateConfigurationSetEventDestination] -> ShowS
UpdateConfigurationSetEventDestination -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateConfigurationSetEventDestination] -> ShowS
$cshowList :: [UpdateConfigurationSetEventDestination] -> ShowS
show :: UpdateConfigurationSetEventDestination -> String
$cshow :: UpdateConfigurationSetEventDestination -> String
showsPrec :: Int -> UpdateConfigurationSetEventDestination -> ShowS
$cshowsPrec :: Int -> UpdateConfigurationSetEventDestination -> ShowS
Prelude.Show, forall x.
Rep UpdateConfigurationSetEventDestination x
-> UpdateConfigurationSetEventDestination
forall x.
UpdateConfigurationSetEventDestination
-> Rep UpdateConfigurationSetEventDestination x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep UpdateConfigurationSetEventDestination x
-> UpdateConfigurationSetEventDestination
$cfrom :: forall x.
UpdateConfigurationSetEventDestination
-> Rep UpdateConfigurationSetEventDestination x
Prelude.Generic)

-- |
-- Create a value of 'UpdateConfigurationSetEventDestination' 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:
--
-- 'configurationSetName', 'updateConfigurationSetEventDestination_configurationSetName' - The name of the configuration set that contains the event destination
-- that you want to update.
--
-- 'eventDestination', 'updateConfigurationSetEventDestination_eventDestination' - The event destination object that you want to apply to the specified
-- configuration set.
newUpdateConfigurationSetEventDestination ::
  -- | 'configurationSetName'
  Prelude.Text ->
  -- | 'eventDestination'
  EventDestination ->
  UpdateConfigurationSetEventDestination
newUpdateConfigurationSetEventDestination :: Text -> EventDestination -> UpdateConfigurationSetEventDestination
newUpdateConfigurationSetEventDestination
  Text
pConfigurationSetName_
  EventDestination
pEventDestination_ =
    UpdateConfigurationSetEventDestination'
      { $sel:configurationSetName:UpdateConfigurationSetEventDestination' :: Text
configurationSetName =
          Text
pConfigurationSetName_,
        $sel:eventDestination:UpdateConfigurationSetEventDestination' :: EventDestination
eventDestination =
          EventDestination
pEventDestination_
      }

-- | The name of the configuration set that contains the event destination
-- that you want to update.
updateConfigurationSetEventDestination_configurationSetName :: Lens.Lens' UpdateConfigurationSetEventDestination Prelude.Text
updateConfigurationSetEventDestination_configurationSetName :: Lens' UpdateConfigurationSetEventDestination Text
updateConfigurationSetEventDestination_configurationSetName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateConfigurationSetEventDestination' {Text
configurationSetName :: Text
$sel:configurationSetName:UpdateConfigurationSetEventDestination' :: UpdateConfigurationSetEventDestination -> Text
configurationSetName} -> Text
configurationSetName) (\s :: UpdateConfigurationSetEventDestination
s@UpdateConfigurationSetEventDestination' {} Text
a -> UpdateConfigurationSetEventDestination
s {$sel:configurationSetName:UpdateConfigurationSetEventDestination' :: Text
configurationSetName = Text
a} :: UpdateConfigurationSetEventDestination)

-- | The event destination object that you want to apply to the specified
-- configuration set.
updateConfigurationSetEventDestination_eventDestination :: Lens.Lens' UpdateConfigurationSetEventDestination EventDestination
updateConfigurationSetEventDestination_eventDestination :: Lens' UpdateConfigurationSetEventDestination EventDestination
updateConfigurationSetEventDestination_eventDestination = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateConfigurationSetEventDestination' {EventDestination
eventDestination :: EventDestination
$sel:eventDestination:UpdateConfigurationSetEventDestination' :: UpdateConfigurationSetEventDestination -> EventDestination
eventDestination} -> EventDestination
eventDestination) (\s :: UpdateConfigurationSetEventDestination
s@UpdateConfigurationSetEventDestination' {} EventDestination
a -> UpdateConfigurationSetEventDestination
s {$sel:eventDestination:UpdateConfigurationSetEventDestination' :: EventDestination
eventDestination = EventDestination
a} :: UpdateConfigurationSetEventDestination)

instance
  Core.AWSRequest
    UpdateConfigurationSetEventDestination
  where
  type
    AWSResponse
      UpdateConfigurationSetEventDestination =
      UpdateConfigurationSetEventDestinationResponse
  request :: (Service -> Service)
-> UpdateConfigurationSetEventDestination
-> Request UpdateConfigurationSetEventDestination
request Service -> Service
overrides =
    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 UpdateConfigurationSetEventDestination
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse
           (AWSResponse UpdateConfigurationSetEventDestination)))
response =
    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
"UpdateConfigurationSetEventDestinationResult"
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Int -> UpdateConfigurationSetEventDestinationResponse
UpdateConfigurationSetEventDestinationResponse'
            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))
      )

instance
  Prelude.Hashable
    UpdateConfigurationSetEventDestination
  where
  hashWithSalt :: Int -> UpdateConfigurationSetEventDestination -> Int
hashWithSalt
    Int
_salt
    UpdateConfigurationSetEventDestination' {Text
EventDestination
eventDestination :: EventDestination
configurationSetName :: Text
$sel:eventDestination:UpdateConfigurationSetEventDestination' :: UpdateConfigurationSetEventDestination -> EventDestination
$sel:configurationSetName:UpdateConfigurationSetEventDestination' :: UpdateConfigurationSetEventDestination -> Text
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
configurationSetName
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` EventDestination
eventDestination

instance
  Prelude.NFData
    UpdateConfigurationSetEventDestination
  where
  rnf :: UpdateConfigurationSetEventDestination -> ()
rnf UpdateConfigurationSetEventDestination' {Text
EventDestination
eventDestination :: EventDestination
configurationSetName :: Text
$sel:eventDestination:UpdateConfigurationSetEventDestination' :: UpdateConfigurationSetEventDestination -> EventDestination
$sel:configurationSetName:UpdateConfigurationSetEventDestination' :: UpdateConfigurationSetEventDestination -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
configurationSetName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf EventDestination
eventDestination

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

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

instance
  Data.ToQuery
    UpdateConfigurationSetEventDestination
  where
  toQuery :: UpdateConfigurationSetEventDestination -> QueryString
toQuery UpdateConfigurationSetEventDestination' {Text
EventDestination
eventDestination :: EventDestination
configurationSetName :: Text
$sel:eventDestination:UpdateConfigurationSetEventDestination' :: UpdateConfigurationSetEventDestination -> EventDestination
$sel:configurationSetName:UpdateConfigurationSetEventDestination' :: UpdateConfigurationSetEventDestination -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: ( ByteString
"UpdateConfigurationSetEventDestination" ::
                      Prelude.ByteString
                  ),
        ByteString
"Version"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2010-12-01" :: Prelude.ByteString),
        ByteString
"ConfigurationSetName" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
configurationSetName,
        ByteString
"EventDestination" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: EventDestination
eventDestination
      ]

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

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

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

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