{-# 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.TestRenderEmailTemplate
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates a preview of the MIME content of an email when provided with a
-- template and a set of replacement data.
--
-- You can execute this operation no more than once per second.
module Amazonka.SESV2.TestRenderEmailTemplate
  ( -- * Creating a Request
    TestRenderEmailTemplate (..),
    newTestRenderEmailTemplate,

    -- * Request Lenses
    testRenderEmailTemplate_templateName,
    testRenderEmailTemplate_templateData,

    -- * Destructuring the Response
    TestRenderEmailTemplateResponse (..),
    newTestRenderEmailTemplateResponse,

    -- * Response Lenses
    testRenderEmailTemplateResponse_httpStatus,
    testRenderEmailTemplateResponse_renderedTemplate,
  )
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

-- | >Represents a request to create a preview of the MIME content of an
-- email when provided with a template and a set of replacement data.
--
-- /See:/ 'newTestRenderEmailTemplate' smart constructor.
data TestRenderEmailTemplate = TestRenderEmailTemplate'
  { -- | The name of the template.
    TestRenderEmailTemplate -> Text
templateName :: Prelude.Text,
    -- | A list of replacement values to apply to the template. This parameter is
    -- a JSON object, typically consisting of key-value pairs in which the keys
    -- correspond to replacement tags in the email template.
    TestRenderEmailTemplate -> Text
templateData :: Prelude.Text
  }
  deriving (TestRenderEmailTemplate -> TestRenderEmailTemplate -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TestRenderEmailTemplate -> TestRenderEmailTemplate -> Bool
$c/= :: TestRenderEmailTemplate -> TestRenderEmailTemplate -> Bool
== :: TestRenderEmailTemplate -> TestRenderEmailTemplate -> Bool
$c== :: TestRenderEmailTemplate -> TestRenderEmailTemplate -> Bool
Prelude.Eq, ReadPrec [TestRenderEmailTemplate]
ReadPrec TestRenderEmailTemplate
Int -> ReadS TestRenderEmailTemplate
ReadS [TestRenderEmailTemplate]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [TestRenderEmailTemplate]
$creadListPrec :: ReadPrec [TestRenderEmailTemplate]
readPrec :: ReadPrec TestRenderEmailTemplate
$creadPrec :: ReadPrec TestRenderEmailTemplate
readList :: ReadS [TestRenderEmailTemplate]
$creadList :: ReadS [TestRenderEmailTemplate]
readsPrec :: Int -> ReadS TestRenderEmailTemplate
$creadsPrec :: Int -> ReadS TestRenderEmailTemplate
Prelude.Read, Int -> TestRenderEmailTemplate -> ShowS
[TestRenderEmailTemplate] -> ShowS
TestRenderEmailTemplate -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TestRenderEmailTemplate] -> ShowS
$cshowList :: [TestRenderEmailTemplate] -> ShowS
show :: TestRenderEmailTemplate -> String
$cshow :: TestRenderEmailTemplate -> String
showsPrec :: Int -> TestRenderEmailTemplate -> ShowS
$cshowsPrec :: Int -> TestRenderEmailTemplate -> ShowS
Prelude.Show, forall x. Rep TestRenderEmailTemplate x -> TestRenderEmailTemplate
forall x. TestRenderEmailTemplate -> Rep TestRenderEmailTemplate x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep TestRenderEmailTemplate x -> TestRenderEmailTemplate
$cfrom :: forall x. TestRenderEmailTemplate -> Rep TestRenderEmailTemplate x
Prelude.Generic)

-- |
-- Create a value of 'TestRenderEmailTemplate' 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:
--
-- 'templateName', 'testRenderEmailTemplate_templateName' - The name of the template.
--
-- 'templateData', 'testRenderEmailTemplate_templateData' - A list of replacement values to apply to the template. This parameter is
-- a JSON object, typically consisting of key-value pairs in which the keys
-- correspond to replacement tags in the email template.
newTestRenderEmailTemplate ::
  -- | 'templateName'
  Prelude.Text ->
  -- | 'templateData'
  Prelude.Text ->
  TestRenderEmailTemplate
newTestRenderEmailTemplate :: Text -> Text -> TestRenderEmailTemplate
newTestRenderEmailTemplate
  Text
pTemplateName_
  Text
pTemplateData_ =
    TestRenderEmailTemplate'
      { $sel:templateName:TestRenderEmailTemplate' :: Text
templateName =
          Text
pTemplateName_,
        $sel:templateData:TestRenderEmailTemplate' :: Text
templateData = Text
pTemplateData_
      }

-- | The name of the template.
testRenderEmailTemplate_templateName :: Lens.Lens' TestRenderEmailTemplate Prelude.Text
testRenderEmailTemplate_templateName :: Lens' TestRenderEmailTemplate Text
testRenderEmailTemplate_templateName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TestRenderEmailTemplate' {Text
templateName :: Text
$sel:templateName:TestRenderEmailTemplate' :: TestRenderEmailTemplate -> Text
templateName} -> Text
templateName) (\s :: TestRenderEmailTemplate
s@TestRenderEmailTemplate' {} Text
a -> TestRenderEmailTemplate
s {$sel:templateName:TestRenderEmailTemplate' :: Text
templateName = Text
a} :: TestRenderEmailTemplate)

-- | A list of replacement values to apply to the template. This parameter is
-- a JSON object, typically consisting of key-value pairs in which the keys
-- correspond to replacement tags in the email template.
testRenderEmailTemplate_templateData :: Lens.Lens' TestRenderEmailTemplate Prelude.Text
testRenderEmailTemplate_templateData :: Lens' TestRenderEmailTemplate Text
testRenderEmailTemplate_templateData = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TestRenderEmailTemplate' {Text
templateData :: Text
$sel:templateData:TestRenderEmailTemplate' :: TestRenderEmailTemplate -> Text
templateData} -> Text
templateData) (\s :: TestRenderEmailTemplate
s@TestRenderEmailTemplate' {} Text
a -> TestRenderEmailTemplate
s {$sel:templateData:TestRenderEmailTemplate' :: Text
templateData = Text
a} :: TestRenderEmailTemplate)

instance Core.AWSRequest TestRenderEmailTemplate where
  type
    AWSResponse TestRenderEmailTemplate =
      TestRenderEmailTemplateResponse
  request :: (Service -> Service)
-> TestRenderEmailTemplate -> Request TestRenderEmailTemplate
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy TestRenderEmailTemplate
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse TestRenderEmailTemplate)))
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 -> Text -> TestRenderEmailTemplateResponse
TestRenderEmailTemplateResponse'
            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
"RenderedTemplate")
      )

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

instance Prelude.NFData TestRenderEmailTemplate where
  rnf :: TestRenderEmailTemplate -> ()
rnf TestRenderEmailTemplate' {Text
templateData :: Text
templateName :: Text
$sel:templateData:TestRenderEmailTemplate' :: TestRenderEmailTemplate -> Text
$sel:templateName:TestRenderEmailTemplate' :: TestRenderEmailTemplate -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
templateName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
templateData

instance Data.ToHeaders TestRenderEmailTemplate where
  toHeaders :: TestRenderEmailTemplate -> 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 TestRenderEmailTemplate where
  toJSON :: TestRenderEmailTemplate -> Value
toJSON TestRenderEmailTemplate' {Text
templateData :: Text
templateName :: Text
$sel:templateData:TestRenderEmailTemplate' :: TestRenderEmailTemplate -> Text
$sel:templateName:TestRenderEmailTemplate' :: TestRenderEmailTemplate -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [forall a. a -> Maybe a
Prelude.Just (Key
"TemplateData" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
templateData)]
      )

instance Data.ToPath TestRenderEmailTemplate where
  toPath :: TestRenderEmailTemplate -> ByteString
toPath TestRenderEmailTemplate' {Text
templateData :: Text
templateName :: Text
$sel:templateData:TestRenderEmailTemplate' :: TestRenderEmailTemplate -> Text
$sel:templateName:TestRenderEmailTemplate' :: TestRenderEmailTemplate -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/v2/email/templates/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
templateName,
        ByteString
"/render"
      ]

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

-- | The following element is returned by the service.
--
-- /See:/ 'newTestRenderEmailTemplateResponse' smart constructor.
data TestRenderEmailTemplateResponse = TestRenderEmailTemplateResponse'
  { -- | The response's http status code.
    TestRenderEmailTemplateResponse -> Int
httpStatus :: Prelude.Int,
    -- | The complete MIME message rendered by applying the data in the
    -- @TemplateData@ parameter to the template specified in the TemplateName
    -- parameter.
    TestRenderEmailTemplateResponse -> Text
renderedTemplate :: Prelude.Text
  }
  deriving (TestRenderEmailTemplateResponse
-> TestRenderEmailTemplateResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TestRenderEmailTemplateResponse
-> TestRenderEmailTemplateResponse -> Bool
$c/= :: TestRenderEmailTemplateResponse
-> TestRenderEmailTemplateResponse -> Bool
== :: TestRenderEmailTemplateResponse
-> TestRenderEmailTemplateResponse -> Bool
$c== :: TestRenderEmailTemplateResponse
-> TestRenderEmailTemplateResponse -> Bool
Prelude.Eq, ReadPrec [TestRenderEmailTemplateResponse]
ReadPrec TestRenderEmailTemplateResponse
Int -> ReadS TestRenderEmailTemplateResponse
ReadS [TestRenderEmailTemplateResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [TestRenderEmailTemplateResponse]
$creadListPrec :: ReadPrec [TestRenderEmailTemplateResponse]
readPrec :: ReadPrec TestRenderEmailTemplateResponse
$creadPrec :: ReadPrec TestRenderEmailTemplateResponse
readList :: ReadS [TestRenderEmailTemplateResponse]
$creadList :: ReadS [TestRenderEmailTemplateResponse]
readsPrec :: Int -> ReadS TestRenderEmailTemplateResponse
$creadsPrec :: Int -> ReadS TestRenderEmailTemplateResponse
Prelude.Read, Int -> TestRenderEmailTemplateResponse -> ShowS
[TestRenderEmailTemplateResponse] -> ShowS
TestRenderEmailTemplateResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TestRenderEmailTemplateResponse] -> ShowS
$cshowList :: [TestRenderEmailTemplateResponse] -> ShowS
show :: TestRenderEmailTemplateResponse -> String
$cshow :: TestRenderEmailTemplateResponse -> String
showsPrec :: Int -> TestRenderEmailTemplateResponse -> ShowS
$cshowsPrec :: Int -> TestRenderEmailTemplateResponse -> ShowS
Prelude.Show, forall x.
Rep TestRenderEmailTemplateResponse x
-> TestRenderEmailTemplateResponse
forall x.
TestRenderEmailTemplateResponse
-> Rep TestRenderEmailTemplateResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep TestRenderEmailTemplateResponse x
-> TestRenderEmailTemplateResponse
$cfrom :: forall x.
TestRenderEmailTemplateResponse
-> Rep TestRenderEmailTemplateResponse x
Prelude.Generic)

-- |
-- Create a value of 'TestRenderEmailTemplateResponse' 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', 'testRenderEmailTemplateResponse_httpStatus' - The response's http status code.
--
-- 'renderedTemplate', 'testRenderEmailTemplateResponse_renderedTemplate' - The complete MIME message rendered by applying the data in the
-- @TemplateData@ parameter to the template specified in the TemplateName
-- parameter.
newTestRenderEmailTemplateResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'renderedTemplate'
  Prelude.Text ->
  TestRenderEmailTemplateResponse
newTestRenderEmailTemplateResponse :: Int -> Text -> TestRenderEmailTemplateResponse
newTestRenderEmailTemplateResponse
  Int
pHttpStatus_
  Text
pRenderedTemplate_ =
    TestRenderEmailTemplateResponse'
      { $sel:httpStatus:TestRenderEmailTemplateResponse' :: Int
httpStatus =
          Int
pHttpStatus_,
        $sel:renderedTemplate:TestRenderEmailTemplateResponse' :: Text
renderedTemplate = Text
pRenderedTemplate_
      }

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

-- | The complete MIME message rendered by applying the data in the
-- @TemplateData@ parameter to the template specified in the TemplateName
-- parameter.
testRenderEmailTemplateResponse_renderedTemplate :: Lens.Lens' TestRenderEmailTemplateResponse Prelude.Text
testRenderEmailTemplateResponse_renderedTemplate :: Lens' TestRenderEmailTemplateResponse Text
testRenderEmailTemplateResponse_renderedTemplate = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TestRenderEmailTemplateResponse' {Text
renderedTemplate :: Text
$sel:renderedTemplate:TestRenderEmailTemplateResponse' :: TestRenderEmailTemplateResponse -> Text
renderedTemplate} -> Text
renderedTemplate) (\s :: TestRenderEmailTemplateResponse
s@TestRenderEmailTemplateResponse' {} Text
a -> TestRenderEmailTemplateResponse
s {$sel:renderedTemplate:TestRenderEmailTemplateResponse' :: Text
renderedTemplate = Text
a} :: TestRenderEmailTemplateResponse)

instance
  Prelude.NFData
    TestRenderEmailTemplateResponse
  where
  rnf :: TestRenderEmailTemplateResponse -> ()
rnf TestRenderEmailTemplateResponse' {Int
Text
renderedTemplate :: Text
httpStatus :: Int
$sel:renderedTemplate:TestRenderEmailTemplateResponse' :: TestRenderEmailTemplateResponse -> Text
$sel:httpStatus:TestRenderEmailTemplateResponse' :: TestRenderEmailTemplateResponse -> 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 Text
renderedTemplate