{-# 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.TestRenderTemplate
-- 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.SES.TestRenderTemplate
  ( -- * Creating a Request
    TestRenderTemplate (..),
    newTestRenderTemplate,

    -- * Request Lenses
    testRenderTemplate_templateName,
    testRenderTemplate_templateData,

    -- * Destructuring the Response
    TestRenderTemplateResponse (..),
    newTestRenderTemplateResponse,

    -- * Response Lenses
    testRenderTemplateResponse_renderedTemplate,
    testRenderTemplateResponse_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

-- | /See:/ 'newTestRenderTemplate' smart constructor.
data TestRenderTemplate = TestRenderTemplate'
  { -- | The name of the template that you want to render.
    TestRenderTemplate -> 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.
    TestRenderTemplate -> Text
templateData :: Prelude.Text
  }
  deriving (TestRenderTemplate -> TestRenderTemplate -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TestRenderTemplate -> TestRenderTemplate -> Bool
$c/= :: TestRenderTemplate -> TestRenderTemplate -> Bool
== :: TestRenderTemplate -> TestRenderTemplate -> Bool
$c== :: TestRenderTemplate -> TestRenderTemplate -> Bool
Prelude.Eq, ReadPrec [TestRenderTemplate]
ReadPrec TestRenderTemplate
Int -> ReadS TestRenderTemplate
ReadS [TestRenderTemplate]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [TestRenderTemplate]
$creadListPrec :: ReadPrec [TestRenderTemplate]
readPrec :: ReadPrec TestRenderTemplate
$creadPrec :: ReadPrec TestRenderTemplate
readList :: ReadS [TestRenderTemplate]
$creadList :: ReadS [TestRenderTemplate]
readsPrec :: Int -> ReadS TestRenderTemplate
$creadsPrec :: Int -> ReadS TestRenderTemplate
Prelude.Read, Int -> TestRenderTemplate -> ShowS
[TestRenderTemplate] -> ShowS
TestRenderTemplate -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TestRenderTemplate] -> ShowS
$cshowList :: [TestRenderTemplate] -> ShowS
show :: TestRenderTemplate -> String
$cshow :: TestRenderTemplate -> String
showsPrec :: Int -> TestRenderTemplate -> ShowS
$cshowsPrec :: Int -> TestRenderTemplate -> ShowS
Prelude.Show, forall x. Rep TestRenderTemplate x -> TestRenderTemplate
forall x. TestRenderTemplate -> Rep TestRenderTemplate x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep TestRenderTemplate x -> TestRenderTemplate
$cfrom :: forall x. TestRenderTemplate -> Rep TestRenderTemplate x
Prelude.Generic)

-- |
-- Create a value of 'TestRenderTemplate' 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', 'testRenderTemplate_templateName' - The name of the template that you want to render.
--
-- 'templateData', 'testRenderTemplate_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.
newTestRenderTemplate ::
  -- | 'templateName'
  Prelude.Text ->
  -- | 'templateData'
  Prelude.Text ->
  TestRenderTemplate
newTestRenderTemplate :: Text -> Text -> TestRenderTemplate
newTestRenderTemplate Text
pTemplateName_ Text
pTemplateData_ =
  TestRenderTemplate'
    { $sel:templateName:TestRenderTemplate' :: Text
templateName = Text
pTemplateName_,
      $sel:templateData:TestRenderTemplate' :: Text
templateData = Text
pTemplateData_
    }

-- | The name of the template that you want to render.
testRenderTemplate_templateName :: Lens.Lens' TestRenderTemplate Prelude.Text
testRenderTemplate_templateName :: Lens' TestRenderTemplate Text
testRenderTemplate_templateName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TestRenderTemplate' {Text
templateName :: Text
$sel:templateName:TestRenderTemplate' :: TestRenderTemplate -> Text
templateName} -> Text
templateName) (\s :: TestRenderTemplate
s@TestRenderTemplate' {} Text
a -> TestRenderTemplate
s {$sel:templateName:TestRenderTemplate' :: Text
templateName = Text
a} :: TestRenderTemplate)

-- | 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.
testRenderTemplate_templateData :: Lens.Lens' TestRenderTemplate Prelude.Text
testRenderTemplate_templateData :: Lens' TestRenderTemplate Text
testRenderTemplate_templateData = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TestRenderTemplate' {Text
templateData :: Text
$sel:templateData:TestRenderTemplate' :: TestRenderTemplate -> Text
templateData} -> Text
templateData) (\s :: TestRenderTemplate
s@TestRenderTemplate' {} Text
a -> TestRenderTemplate
s {$sel:templateData:TestRenderTemplate' :: Text
templateData = Text
a} :: TestRenderTemplate)

instance Core.AWSRequest TestRenderTemplate where
  type
    AWSResponse TestRenderTemplate =
      TestRenderTemplateResponse
  request :: (Service -> Service)
-> TestRenderTemplate -> Request TestRenderTemplate
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 TestRenderTemplate
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse TestRenderTemplate)))
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
"TestRenderTemplateResult"
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Maybe Text -> Int -> TestRenderTemplateResponse
TestRenderTemplateResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"RenderedTemplate")
            forall (f :: * -> *) a b. Applicative f => 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 TestRenderTemplate where
  hashWithSalt :: Int -> TestRenderTemplate -> Int
hashWithSalt Int
_salt TestRenderTemplate' {Text
templateData :: Text
templateName :: Text
$sel:templateData:TestRenderTemplate' :: TestRenderTemplate -> Text
$sel:templateName:TestRenderTemplate' :: TestRenderTemplate -> 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 TestRenderTemplate where
  rnf :: TestRenderTemplate -> ()
rnf TestRenderTemplate' {Text
templateData :: Text
templateName :: Text
$sel:templateData:TestRenderTemplate' :: TestRenderTemplate -> Text
$sel:templateName:TestRenderTemplate' :: TestRenderTemplate -> 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 TestRenderTemplate where
  toHeaders :: TestRenderTemplate -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

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

instance Data.ToQuery TestRenderTemplate where
  toQuery :: TestRenderTemplate -> QueryString
toQuery TestRenderTemplate' {Text
templateData :: Text
templateName :: Text
$sel:templateData:TestRenderTemplate' :: TestRenderTemplate -> Text
$sel:templateName:TestRenderTemplate' :: TestRenderTemplate -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"TestRenderTemplate" :: Prelude.ByteString),
        ByteString
"Version"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2010-12-01" :: Prelude.ByteString),
        ByteString
"TemplateName" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
templateName,
        ByteString
"TemplateData" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
templateData
      ]

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

-- |
-- Create a value of 'TestRenderTemplateResponse' 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:
--
-- 'renderedTemplate', 'testRenderTemplateResponse_renderedTemplate' - The complete MIME message rendered by applying the data in the
-- TemplateData parameter to the template specified in the TemplateName
-- parameter.
--
-- 'httpStatus', 'testRenderTemplateResponse_httpStatus' - The response's http status code.
newTestRenderTemplateResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  TestRenderTemplateResponse
newTestRenderTemplateResponse :: Int -> TestRenderTemplateResponse
newTestRenderTemplateResponse Int
pHttpStatus_ =
  TestRenderTemplateResponse'
    { $sel:renderedTemplate:TestRenderTemplateResponse' :: Maybe Text
renderedTemplate =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:TestRenderTemplateResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

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

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

instance Prelude.NFData TestRenderTemplateResponse where
  rnf :: TestRenderTemplateResponse -> ()
rnf TestRenderTemplateResponse' {Int
Maybe Text
httpStatus :: Int
renderedTemplate :: Maybe Text
$sel:httpStatus:TestRenderTemplateResponse' :: TestRenderTemplateResponse -> Int
$sel:renderedTemplate:TestRenderTemplateResponse' :: TestRenderTemplateResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
renderedTemplate
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus