{-# 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.GetDomainDeliverabilityCampaign
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Retrieve all the deliverability data for a specific campaign. This data
-- is available for a campaign only if the campaign sent email by using a
-- domain that the Deliverability dashboard is enabled for.
module Amazonka.SESV2.GetDomainDeliverabilityCampaign
  ( -- * Creating a Request
    GetDomainDeliverabilityCampaign (..),
    newGetDomainDeliverabilityCampaign,

    -- * Request Lenses
    getDomainDeliverabilityCampaign_campaignId,

    -- * Destructuring the Response
    GetDomainDeliverabilityCampaignResponse (..),
    newGetDomainDeliverabilityCampaignResponse,

    -- * Response Lenses
    getDomainDeliverabilityCampaignResponse_httpStatus,
    getDomainDeliverabilityCampaignResponse_domainDeliverabilityCampaign,
  )
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

-- | Retrieve all the deliverability data for a specific campaign. This data
-- is available for a campaign only if the campaign sent email by using a
-- domain that the Deliverability dashboard is enabled for
-- (@PutDeliverabilityDashboardOption@ operation).
--
-- /See:/ 'newGetDomainDeliverabilityCampaign' smart constructor.
data GetDomainDeliverabilityCampaign = GetDomainDeliverabilityCampaign'
  { -- | The unique identifier for the campaign. The Deliverability dashboard
    -- automatically generates and assigns this identifier to a campaign.
    GetDomainDeliverabilityCampaign -> Text
campaignId :: Prelude.Text
  }
  deriving (GetDomainDeliverabilityCampaign
-> GetDomainDeliverabilityCampaign -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetDomainDeliverabilityCampaign
-> GetDomainDeliverabilityCampaign -> Bool
$c/= :: GetDomainDeliverabilityCampaign
-> GetDomainDeliverabilityCampaign -> Bool
== :: GetDomainDeliverabilityCampaign
-> GetDomainDeliverabilityCampaign -> Bool
$c== :: GetDomainDeliverabilityCampaign
-> GetDomainDeliverabilityCampaign -> Bool
Prelude.Eq, ReadPrec [GetDomainDeliverabilityCampaign]
ReadPrec GetDomainDeliverabilityCampaign
Int -> ReadS GetDomainDeliverabilityCampaign
ReadS [GetDomainDeliverabilityCampaign]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetDomainDeliverabilityCampaign]
$creadListPrec :: ReadPrec [GetDomainDeliverabilityCampaign]
readPrec :: ReadPrec GetDomainDeliverabilityCampaign
$creadPrec :: ReadPrec GetDomainDeliverabilityCampaign
readList :: ReadS [GetDomainDeliverabilityCampaign]
$creadList :: ReadS [GetDomainDeliverabilityCampaign]
readsPrec :: Int -> ReadS GetDomainDeliverabilityCampaign
$creadsPrec :: Int -> ReadS GetDomainDeliverabilityCampaign
Prelude.Read, Int -> GetDomainDeliverabilityCampaign -> ShowS
[GetDomainDeliverabilityCampaign] -> ShowS
GetDomainDeliverabilityCampaign -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetDomainDeliverabilityCampaign] -> ShowS
$cshowList :: [GetDomainDeliverabilityCampaign] -> ShowS
show :: GetDomainDeliverabilityCampaign -> String
$cshow :: GetDomainDeliverabilityCampaign -> String
showsPrec :: Int -> GetDomainDeliverabilityCampaign -> ShowS
$cshowsPrec :: Int -> GetDomainDeliverabilityCampaign -> ShowS
Prelude.Show, forall x.
Rep GetDomainDeliverabilityCampaign x
-> GetDomainDeliverabilityCampaign
forall x.
GetDomainDeliverabilityCampaign
-> Rep GetDomainDeliverabilityCampaign x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetDomainDeliverabilityCampaign x
-> GetDomainDeliverabilityCampaign
$cfrom :: forall x.
GetDomainDeliverabilityCampaign
-> Rep GetDomainDeliverabilityCampaign x
Prelude.Generic)

-- |
-- Create a value of 'GetDomainDeliverabilityCampaign' 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:
--
-- 'campaignId', 'getDomainDeliverabilityCampaign_campaignId' - The unique identifier for the campaign. The Deliverability dashboard
-- automatically generates and assigns this identifier to a campaign.
newGetDomainDeliverabilityCampaign ::
  -- | 'campaignId'
  Prelude.Text ->
  GetDomainDeliverabilityCampaign
newGetDomainDeliverabilityCampaign :: Text -> GetDomainDeliverabilityCampaign
newGetDomainDeliverabilityCampaign Text
pCampaignId_ =
  GetDomainDeliverabilityCampaign'
    { $sel:campaignId:GetDomainDeliverabilityCampaign' :: Text
campaignId =
        Text
pCampaignId_
    }

-- | The unique identifier for the campaign. The Deliverability dashboard
-- automatically generates and assigns this identifier to a campaign.
getDomainDeliverabilityCampaign_campaignId :: Lens.Lens' GetDomainDeliverabilityCampaign Prelude.Text
getDomainDeliverabilityCampaign_campaignId :: Lens' GetDomainDeliverabilityCampaign Text
getDomainDeliverabilityCampaign_campaignId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetDomainDeliverabilityCampaign' {Text
campaignId :: Text
$sel:campaignId:GetDomainDeliverabilityCampaign' :: GetDomainDeliverabilityCampaign -> Text
campaignId} -> Text
campaignId) (\s :: GetDomainDeliverabilityCampaign
s@GetDomainDeliverabilityCampaign' {} Text
a -> GetDomainDeliverabilityCampaign
s {$sel:campaignId:GetDomainDeliverabilityCampaign' :: Text
campaignId = Text
a} :: GetDomainDeliverabilityCampaign)

instance
  Core.AWSRequest
    GetDomainDeliverabilityCampaign
  where
  type
    AWSResponse GetDomainDeliverabilityCampaign =
      GetDomainDeliverabilityCampaignResponse
  request :: (Service -> Service)
-> GetDomainDeliverabilityCampaign
-> Request GetDomainDeliverabilityCampaign
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.get (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy GetDomainDeliverabilityCampaign
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse (AWSResponse GetDomainDeliverabilityCampaign)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Int
-> DomainDeliverabilityCampaign
-> GetDomainDeliverabilityCampaignResponse
GetDomainDeliverabilityCampaignResponse'
            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))
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String a
Data..:> Key
"DomainDeliverabilityCampaign")
      )

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

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

instance
  Data.ToHeaders
    GetDomainDeliverabilityCampaign
  where
  toHeaders :: GetDomainDeliverabilityCampaign -> 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.ToPath GetDomainDeliverabilityCampaign where
  toPath :: GetDomainDeliverabilityCampaign -> ByteString
toPath GetDomainDeliverabilityCampaign' {Text
campaignId :: Text
$sel:campaignId:GetDomainDeliverabilityCampaign' :: GetDomainDeliverabilityCampaign -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/v2/email/deliverability-dashboard/campaigns/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
campaignId
      ]

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

-- | An object that contains all the deliverability data for a specific
-- campaign. This data is available for a campaign only if the campaign
-- sent email by using a domain that the Deliverability dashboard is
-- enabled for.
--
-- /See:/ 'newGetDomainDeliverabilityCampaignResponse' smart constructor.
data GetDomainDeliverabilityCampaignResponse = GetDomainDeliverabilityCampaignResponse'
  { -- | The response's http status code.
    GetDomainDeliverabilityCampaignResponse -> Int
httpStatus :: Prelude.Int,
    -- | An object that contains the deliverability data for the campaign.
    GetDomainDeliverabilityCampaignResponse
-> DomainDeliverabilityCampaign
domainDeliverabilityCampaign :: DomainDeliverabilityCampaign
  }
  deriving (GetDomainDeliverabilityCampaignResponse
-> GetDomainDeliverabilityCampaignResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetDomainDeliverabilityCampaignResponse
-> GetDomainDeliverabilityCampaignResponse -> Bool
$c/= :: GetDomainDeliverabilityCampaignResponse
-> GetDomainDeliverabilityCampaignResponse -> Bool
== :: GetDomainDeliverabilityCampaignResponse
-> GetDomainDeliverabilityCampaignResponse -> Bool
$c== :: GetDomainDeliverabilityCampaignResponse
-> GetDomainDeliverabilityCampaignResponse -> Bool
Prelude.Eq, ReadPrec [GetDomainDeliverabilityCampaignResponse]
ReadPrec GetDomainDeliverabilityCampaignResponse
Int -> ReadS GetDomainDeliverabilityCampaignResponse
ReadS [GetDomainDeliverabilityCampaignResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetDomainDeliverabilityCampaignResponse]
$creadListPrec :: ReadPrec [GetDomainDeliverabilityCampaignResponse]
readPrec :: ReadPrec GetDomainDeliverabilityCampaignResponse
$creadPrec :: ReadPrec GetDomainDeliverabilityCampaignResponse
readList :: ReadS [GetDomainDeliverabilityCampaignResponse]
$creadList :: ReadS [GetDomainDeliverabilityCampaignResponse]
readsPrec :: Int -> ReadS GetDomainDeliverabilityCampaignResponse
$creadsPrec :: Int -> ReadS GetDomainDeliverabilityCampaignResponse
Prelude.Read, Int -> GetDomainDeliverabilityCampaignResponse -> ShowS
[GetDomainDeliverabilityCampaignResponse] -> ShowS
GetDomainDeliverabilityCampaignResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetDomainDeliverabilityCampaignResponse] -> ShowS
$cshowList :: [GetDomainDeliverabilityCampaignResponse] -> ShowS
show :: GetDomainDeliverabilityCampaignResponse -> String
$cshow :: GetDomainDeliverabilityCampaignResponse -> String
showsPrec :: Int -> GetDomainDeliverabilityCampaignResponse -> ShowS
$cshowsPrec :: Int -> GetDomainDeliverabilityCampaignResponse -> ShowS
Prelude.Show, forall x.
Rep GetDomainDeliverabilityCampaignResponse x
-> GetDomainDeliverabilityCampaignResponse
forall x.
GetDomainDeliverabilityCampaignResponse
-> Rep GetDomainDeliverabilityCampaignResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetDomainDeliverabilityCampaignResponse x
-> GetDomainDeliverabilityCampaignResponse
$cfrom :: forall x.
GetDomainDeliverabilityCampaignResponse
-> Rep GetDomainDeliverabilityCampaignResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetDomainDeliverabilityCampaignResponse' 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', 'getDomainDeliverabilityCampaignResponse_httpStatus' - The response's http status code.
--
-- 'domainDeliverabilityCampaign', 'getDomainDeliverabilityCampaignResponse_domainDeliverabilityCampaign' - An object that contains the deliverability data for the campaign.
newGetDomainDeliverabilityCampaignResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'domainDeliverabilityCampaign'
  DomainDeliverabilityCampaign ->
  GetDomainDeliverabilityCampaignResponse
newGetDomainDeliverabilityCampaignResponse :: Int
-> DomainDeliverabilityCampaign
-> GetDomainDeliverabilityCampaignResponse
newGetDomainDeliverabilityCampaignResponse
  Int
pHttpStatus_
  DomainDeliverabilityCampaign
pDomainDeliverabilityCampaign_ =
    GetDomainDeliverabilityCampaignResponse'
      { $sel:httpStatus:GetDomainDeliverabilityCampaignResponse' :: Int
httpStatus =
          Int
pHttpStatus_,
        $sel:domainDeliverabilityCampaign:GetDomainDeliverabilityCampaignResponse' :: DomainDeliverabilityCampaign
domainDeliverabilityCampaign =
          DomainDeliverabilityCampaign
pDomainDeliverabilityCampaign_
      }

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

-- | An object that contains the deliverability data for the campaign.
getDomainDeliverabilityCampaignResponse_domainDeliverabilityCampaign :: Lens.Lens' GetDomainDeliverabilityCampaignResponse DomainDeliverabilityCampaign
getDomainDeliverabilityCampaignResponse_domainDeliverabilityCampaign :: Lens'
  GetDomainDeliverabilityCampaignResponse
  DomainDeliverabilityCampaign
getDomainDeliverabilityCampaignResponse_domainDeliverabilityCampaign = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetDomainDeliverabilityCampaignResponse' {DomainDeliverabilityCampaign
domainDeliverabilityCampaign :: DomainDeliverabilityCampaign
$sel:domainDeliverabilityCampaign:GetDomainDeliverabilityCampaignResponse' :: GetDomainDeliverabilityCampaignResponse
-> DomainDeliverabilityCampaign
domainDeliverabilityCampaign} -> DomainDeliverabilityCampaign
domainDeliverabilityCampaign) (\s :: GetDomainDeliverabilityCampaignResponse
s@GetDomainDeliverabilityCampaignResponse' {} DomainDeliverabilityCampaign
a -> GetDomainDeliverabilityCampaignResponse
s {$sel:domainDeliverabilityCampaign:GetDomainDeliverabilityCampaignResponse' :: DomainDeliverabilityCampaign
domainDeliverabilityCampaign = DomainDeliverabilityCampaign
a} :: GetDomainDeliverabilityCampaignResponse)

instance
  Prelude.NFData
    GetDomainDeliverabilityCampaignResponse
  where
  rnf :: GetDomainDeliverabilityCampaignResponse -> ()
rnf GetDomainDeliverabilityCampaignResponse' {Int
DomainDeliverabilityCampaign
domainDeliverabilityCampaign :: DomainDeliverabilityCampaign
httpStatus :: Int
$sel:domainDeliverabilityCampaign:GetDomainDeliverabilityCampaignResponse' :: GetDomainDeliverabilityCampaignResponse
-> DomainDeliverabilityCampaign
$sel:httpStatus:GetDomainDeliverabilityCampaignResponse' :: GetDomainDeliverabilityCampaignResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf DomainDeliverabilityCampaign
domainDeliverabilityCampaign