{-# 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.SESV2.PutConfigurationSetReputationOptions
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Enable or disable collection of reputation metrics for emails that you
-- send using a particular configuration set in a specific Amazon Web
-- Services Region.
module Amazonka.SESV2.PutConfigurationSetReputationOptions
  ( -- * Creating a Request
    PutConfigurationSetReputationOptions (..),
    newPutConfigurationSetReputationOptions,

    -- * Request Lenses
    putConfigurationSetReputationOptions_reputationMetricsEnabled,
    putConfigurationSetReputationOptions_configurationSetName,

    -- * Destructuring the Response
    PutConfigurationSetReputationOptionsResponse (..),
    newPutConfigurationSetReputationOptionsResponse,

    -- * Response Lenses
    putConfigurationSetReputationOptionsResponse_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.SESV2.Types

-- | A request to enable or disable tracking of reputation metrics for a
-- configuration set.
--
-- /See:/ 'newPutConfigurationSetReputationOptions' smart constructor.
data PutConfigurationSetReputationOptions = PutConfigurationSetReputationOptions'
  { -- | If @true@, tracking of reputation metrics is enabled for the
    -- configuration set. If @false@, tracking of reputation metrics is
    -- disabled for the configuration set.
    PutConfigurationSetReputationOptions -> Maybe Bool
reputationMetricsEnabled :: Prelude.Maybe Prelude.Bool,
    -- | The name of the configuration set.
    PutConfigurationSetReputationOptions -> Text
configurationSetName :: Prelude.Text
  }
  deriving (PutConfigurationSetReputationOptions
-> PutConfigurationSetReputationOptions -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PutConfigurationSetReputationOptions
-> PutConfigurationSetReputationOptions -> Bool
$c/= :: PutConfigurationSetReputationOptions
-> PutConfigurationSetReputationOptions -> Bool
== :: PutConfigurationSetReputationOptions
-> PutConfigurationSetReputationOptions -> Bool
$c== :: PutConfigurationSetReputationOptions
-> PutConfigurationSetReputationOptions -> Bool
Prelude.Eq, ReadPrec [PutConfigurationSetReputationOptions]
ReadPrec PutConfigurationSetReputationOptions
Int -> ReadS PutConfigurationSetReputationOptions
ReadS [PutConfigurationSetReputationOptions]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [PutConfigurationSetReputationOptions]
$creadListPrec :: ReadPrec [PutConfigurationSetReputationOptions]
readPrec :: ReadPrec PutConfigurationSetReputationOptions
$creadPrec :: ReadPrec PutConfigurationSetReputationOptions
readList :: ReadS [PutConfigurationSetReputationOptions]
$creadList :: ReadS [PutConfigurationSetReputationOptions]
readsPrec :: Int -> ReadS PutConfigurationSetReputationOptions
$creadsPrec :: Int -> ReadS PutConfigurationSetReputationOptions
Prelude.Read, Int -> PutConfigurationSetReputationOptions -> ShowS
[PutConfigurationSetReputationOptions] -> ShowS
PutConfigurationSetReputationOptions -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PutConfigurationSetReputationOptions] -> ShowS
$cshowList :: [PutConfigurationSetReputationOptions] -> ShowS
show :: PutConfigurationSetReputationOptions -> String
$cshow :: PutConfigurationSetReputationOptions -> String
showsPrec :: Int -> PutConfigurationSetReputationOptions -> ShowS
$cshowsPrec :: Int -> PutConfigurationSetReputationOptions -> ShowS
Prelude.Show, forall x.
Rep PutConfigurationSetReputationOptions x
-> PutConfigurationSetReputationOptions
forall x.
PutConfigurationSetReputationOptions
-> Rep PutConfigurationSetReputationOptions x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep PutConfigurationSetReputationOptions x
-> PutConfigurationSetReputationOptions
$cfrom :: forall x.
PutConfigurationSetReputationOptions
-> Rep PutConfigurationSetReputationOptions x
Prelude.Generic)

-- |
-- Create a value of 'PutConfigurationSetReputationOptions' 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:
--
-- 'reputationMetricsEnabled', 'putConfigurationSetReputationOptions_reputationMetricsEnabled' - If @true@, tracking of reputation metrics is enabled for the
-- configuration set. If @false@, tracking of reputation metrics is
-- disabled for the configuration set.
--
-- 'configurationSetName', 'putConfigurationSetReputationOptions_configurationSetName' - The name of the configuration set.
newPutConfigurationSetReputationOptions ::
  -- | 'configurationSetName'
  Prelude.Text ->
  PutConfigurationSetReputationOptions
newPutConfigurationSetReputationOptions :: Text -> PutConfigurationSetReputationOptions
newPutConfigurationSetReputationOptions
  Text
pConfigurationSetName_ =
    PutConfigurationSetReputationOptions'
      { $sel:reputationMetricsEnabled:PutConfigurationSetReputationOptions' :: Maybe Bool
reputationMetricsEnabled =
          forall a. Maybe a
Prelude.Nothing,
        $sel:configurationSetName:PutConfigurationSetReputationOptions' :: Text
configurationSetName =
          Text
pConfigurationSetName_
      }

-- | If @true@, tracking of reputation metrics is enabled for the
-- configuration set. If @false@, tracking of reputation metrics is
-- disabled for the configuration set.
putConfigurationSetReputationOptions_reputationMetricsEnabled :: Lens.Lens' PutConfigurationSetReputationOptions (Prelude.Maybe Prelude.Bool)
putConfigurationSetReputationOptions_reputationMetricsEnabled :: Lens' PutConfigurationSetReputationOptions (Maybe Bool)
putConfigurationSetReputationOptions_reputationMetricsEnabled = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PutConfigurationSetReputationOptions' {Maybe Bool
reputationMetricsEnabled :: Maybe Bool
$sel:reputationMetricsEnabled:PutConfigurationSetReputationOptions' :: PutConfigurationSetReputationOptions -> Maybe Bool
reputationMetricsEnabled} -> Maybe Bool
reputationMetricsEnabled) (\s :: PutConfigurationSetReputationOptions
s@PutConfigurationSetReputationOptions' {} Maybe Bool
a -> PutConfigurationSetReputationOptions
s {$sel:reputationMetricsEnabled:PutConfigurationSetReputationOptions' :: Maybe Bool
reputationMetricsEnabled = Maybe Bool
a} :: PutConfigurationSetReputationOptions)

-- | The name of the configuration set.
putConfigurationSetReputationOptions_configurationSetName :: Lens.Lens' PutConfigurationSetReputationOptions Prelude.Text
putConfigurationSetReputationOptions_configurationSetName :: Lens' PutConfigurationSetReputationOptions Text
putConfigurationSetReputationOptions_configurationSetName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PutConfigurationSetReputationOptions' {Text
configurationSetName :: Text
$sel:configurationSetName:PutConfigurationSetReputationOptions' :: PutConfigurationSetReputationOptions -> Text
configurationSetName} -> Text
configurationSetName) (\s :: PutConfigurationSetReputationOptions
s@PutConfigurationSetReputationOptions' {} Text
a -> PutConfigurationSetReputationOptions
s {$sel:configurationSetName:PutConfigurationSetReputationOptions' :: Text
configurationSetName = Text
a} :: PutConfigurationSetReputationOptions)

instance
  Core.AWSRequest
    PutConfigurationSetReputationOptions
  where
  type
    AWSResponse PutConfigurationSetReputationOptions =
      PutConfigurationSetReputationOptionsResponse
  request :: (Service -> Service)
-> PutConfigurationSetReputationOptions
-> Request PutConfigurationSetReputationOptions
request Service -> Service
overrides =
    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 PutConfigurationSetReputationOptions
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse
           (AWSResponse PutConfigurationSetReputationOptions)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> () -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveEmpty
      ( \Int
s ResponseHeaders
h ()
x ->
          Int -> PutConfigurationSetReputationOptionsResponse
PutConfigurationSetReputationOptionsResponse'
            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
    PutConfigurationSetReputationOptions
  where
  hashWithSalt :: Int -> PutConfigurationSetReputationOptions -> Int
hashWithSalt
    Int
_salt
    PutConfigurationSetReputationOptions' {Maybe Bool
Text
configurationSetName :: Text
reputationMetricsEnabled :: Maybe Bool
$sel:configurationSetName:PutConfigurationSetReputationOptions' :: PutConfigurationSetReputationOptions -> Text
$sel:reputationMetricsEnabled:PutConfigurationSetReputationOptions' :: PutConfigurationSetReputationOptions -> Maybe Bool
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
reputationMetricsEnabled
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
configurationSetName

instance
  Prelude.NFData
    PutConfigurationSetReputationOptions
  where
  rnf :: PutConfigurationSetReputationOptions -> ()
rnf PutConfigurationSetReputationOptions' {Maybe Bool
Text
configurationSetName :: Text
reputationMetricsEnabled :: Maybe Bool
$sel:configurationSetName:PutConfigurationSetReputationOptions' :: PutConfigurationSetReputationOptions -> Text
$sel:reputationMetricsEnabled:PutConfigurationSetReputationOptions' :: PutConfigurationSetReputationOptions -> Maybe Bool
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
reputationMetricsEnabled
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
configurationSetName

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

instance
  Data.ToJSON
    PutConfigurationSetReputationOptions
  where
  toJSON :: PutConfigurationSetReputationOptions -> Value
toJSON PutConfigurationSetReputationOptions' {Maybe Bool
Text
configurationSetName :: Text
reputationMetricsEnabled :: Maybe Bool
$sel:configurationSetName:PutConfigurationSetReputationOptions' :: PutConfigurationSetReputationOptions -> Text
$sel:reputationMetricsEnabled:PutConfigurationSetReputationOptions' :: PutConfigurationSetReputationOptions -> Maybe Bool
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"ReputationMetricsEnabled" 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
reputationMetricsEnabled
          ]
      )

instance
  Data.ToPath
    PutConfigurationSetReputationOptions
  where
  toPath :: PutConfigurationSetReputationOptions -> ByteString
toPath PutConfigurationSetReputationOptions' {Maybe Bool
Text
configurationSetName :: Text
reputationMetricsEnabled :: Maybe Bool
$sel:configurationSetName:PutConfigurationSetReputationOptions' :: PutConfigurationSetReputationOptions -> Text
$sel:reputationMetricsEnabled:PutConfigurationSetReputationOptions' :: PutConfigurationSetReputationOptions -> Maybe Bool
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/v2/email/configuration-sets/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
configurationSetName,
        ByteString
"/reputation-options"
      ]

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

-- | An HTTP 200 response if the request succeeds, or an error message if the
-- request fails.
--
-- /See:/ 'newPutConfigurationSetReputationOptionsResponse' smart constructor.
data PutConfigurationSetReputationOptionsResponse = PutConfigurationSetReputationOptionsResponse'
  { -- | The response's http status code.
    PutConfigurationSetReputationOptionsResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (PutConfigurationSetReputationOptionsResponse
-> PutConfigurationSetReputationOptionsResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PutConfigurationSetReputationOptionsResponse
-> PutConfigurationSetReputationOptionsResponse -> Bool
$c/= :: PutConfigurationSetReputationOptionsResponse
-> PutConfigurationSetReputationOptionsResponse -> Bool
== :: PutConfigurationSetReputationOptionsResponse
-> PutConfigurationSetReputationOptionsResponse -> Bool
$c== :: PutConfigurationSetReputationOptionsResponse
-> PutConfigurationSetReputationOptionsResponse -> Bool
Prelude.Eq, ReadPrec [PutConfigurationSetReputationOptionsResponse]
ReadPrec PutConfigurationSetReputationOptionsResponse
Int -> ReadS PutConfigurationSetReputationOptionsResponse
ReadS [PutConfigurationSetReputationOptionsResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [PutConfigurationSetReputationOptionsResponse]
$creadListPrec :: ReadPrec [PutConfigurationSetReputationOptionsResponse]
readPrec :: ReadPrec PutConfigurationSetReputationOptionsResponse
$creadPrec :: ReadPrec PutConfigurationSetReputationOptionsResponse
readList :: ReadS [PutConfigurationSetReputationOptionsResponse]
$creadList :: ReadS [PutConfigurationSetReputationOptionsResponse]
readsPrec :: Int -> ReadS PutConfigurationSetReputationOptionsResponse
$creadsPrec :: Int -> ReadS PutConfigurationSetReputationOptionsResponse
Prelude.Read, Int -> PutConfigurationSetReputationOptionsResponse -> ShowS
[PutConfigurationSetReputationOptionsResponse] -> ShowS
PutConfigurationSetReputationOptionsResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PutConfigurationSetReputationOptionsResponse] -> ShowS
$cshowList :: [PutConfigurationSetReputationOptionsResponse] -> ShowS
show :: PutConfigurationSetReputationOptionsResponse -> String
$cshow :: PutConfigurationSetReputationOptionsResponse -> String
showsPrec :: Int -> PutConfigurationSetReputationOptionsResponse -> ShowS
$cshowsPrec :: Int -> PutConfigurationSetReputationOptionsResponse -> ShowS
Prelude.Show, forall x.
Rep PutConfigurationSetReputationOptionsResponse x
-> PutConfigurationSetReputationOptionsResponse
forall x.
PutConfigurationSetReputationOptionsResponse
-> Rep PutConfigurationSetReputationOptionsResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep PutConfigurationSetReputationOptionsResponse x
-> PutConfigurationSetReputationOptionsResponse
$cfrom :: forall x.
PutConfigurationSetReputationOptionsResponse
-> Rep PutConfigurationSetReputationOptionsResponse x
Prelude.Generic)

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

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

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