{-# 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.Pinpoint.ListTemplateVersions
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Retrieves information about all the versions of a specific message
-- template.
module Amazonka.Pinpoint.ListTemplateVersions
  ( -- * Creating a Request
    ListTemplateVersions (..),
    newListTemplateVersions,

    -- * Request Lenses
    listTemplateVersions_nextToken,
    listTemplateVersions_pageSize,
    listTemplateVersions_templateName,
    listTemplateVersions_templateType,

    -- * Destructuring the Response
    ListTemplateVersionsResponse (..),
    newListTemplateVersionsResponse,

    -- * Response Lenses
    listTemplateVersionsResponse_httpStatus,
    listTemplateVersionsResponse_templateVersionsResponse,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.Pinpoint.Types
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newListTemplateVersions' smart constructor.
data ListTemplateVersions = ListTemplateVersions'
  { -- | The string that specifies which page of results to return in a paginated
    -- response. This parameter is not supported for application, campaign, and
    -- journey metrics.
    ListTemplateVersions -> Maybe Text
nextToken :: Prelude.Maybe Prelude.Text,
    -- | The maximum number of items to include in each page of a paginated
    -- response. This parameter is not supported for application, campaign, and
    -- journey metrics.
    ListTemplateVersions -> Maybe Text
pageSize :: Prelude.Maybe Prelude.Text,
    -- | The name of the message template. A template name must start with an
    -- alphanumeric character and can contain a maximum of 128 characters. The
    -- characters can be alphanumeric characters, underscores (_), or hyphens
    -- (-). Template names are case sensitive.
    ListTemplateVersions -> Text
templateName :: Prelude.Text,
    -- | The type of channel that the message template is designed for. Valid
    -- values are: EMAIL, PUSH, SMS, and VOICE.
    ListTemplateVersions -> Text
templateType :: Prelude.Text
  }
  deriving (ListTemplateVersions -> ListTemplateVersions -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ListTemplateVersions -> ListTemplateVersions -> Bool
$c/= :: ListTemplateVersions -> ListTemplateVersions -> Bool
== :: ListTemplateVersions -> ListTemplateVersions -> Bool
$c== :: ListTemplateVersions -> ListTemplateVersions -> Bool
Prelude.Eq, ReadPrec [ListTemplateVersions]
ReadPrec ListTemplateVersions
Int -> ReadS ListTemplateVersions
ReadS [ListTemplateVersions]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ListTemplateVersions]
$creadListPrec :: ReadPrec [ListTemplateVersions]
readPrec :: ReadPrec ListTemplateVersions
$creadPrec :: ReadPrec ListTemplateVersions
readList :: ReadS [ListTemplateVersions]
$creadList :: ReadS [ListTemplateVersions]
readsPrec :: Int -> ReadS ListTemplateVersions
$creadsPrec :: Int -> ReadS ListTemplateVersions
Prelude.Read, Int -> ListTemplateVersions -> ShowS
[ListTemplateVersions] -> ShowS
ListTemplateVersions -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ListTemplateVersions] -> ShowS
$cshowList :: [ListTemplateVersions] -> ShowS
show :: ListTemplateVersions -> String
$cshow :: ListTemplateVersions -> String
showsPrec :: Int -> ListTemplateVersions -> ShowS
$cshowsPrec :: Int -> ListTemplateVersions -> ShowS
Prelude.Show, forall x. Rep ListTemplateVersions x -> ListTemplateVersions
forall x. ListTemplateVersions -> Rep ListTemplateVersions x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ListTemplateVersions x -> ListTemplateVersions
$cfrom :: forall x. ListTemplateVersions -> Rep ListTemplateVersions x
Prelude.Generic)

-- |
-- Create a value of 'ListTemplateVersions' 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:
--
-- 'nextToken', 'listTemplateVersions_nextToken' - The string that specifies which page of results to return in a paginated
-- response. This parameter is not supported for application, campaign, and
-- journey metrics.
--
-- 'pageSize', 'listTemplateVersions_pageSize' - The maximum number of items to include in each page of a paginated
-- response. This parameter is not supported for application, campaign, and
-- journey metrics.
--
-- 'templateName', 'listTemplateVersions_templateName' - The name of the message template. A template name must start with an
-- alphanumeric character and can contain a maximum of 128 characters. The
-- characters can be alphanumeric characters, underscores (_), or hyphens
-- (-). Template names are case sensitive.
--
-- 'templateType', 'listTemplateVersions_templateType' - The type of channel that the message template is designed for. Valid
-- values are: EMAIL, PUSH, SMS, and VOICE.
newListTemplateVersions ::
  -- | 'templateName'
  Prelude.Text ->
  -- | 'templateType'
  Prelude.Text ->
  ListTemplateVersions
newListTemplateVersions :: Text -> Text -> ListTemplateVersions
newListTemplateVersions Text
pTemplateName_ Text
pTemplateType_ =
  ListTemplateVersions'
    { $sel:nextToken:ListTemplateVersions' :: Maybe Text
nextToken = forall a. Maybe a
Prelude.Nothing,
      $sel:pageSize:ListTemplateVersions' :: Maybe Text
pageSize = forall a. Maybe a
Prelude.Nothing,
      $sel:templateName:ListTemplateVersions' :: Text
templateName = Text
pTemplateName_,
      $sel:templateType:ListTemplateVersions' :: Text
templateType = Text
pTemplateType_
    }

-- | The string that specifies which page of results to return in a paginated
-- response. This parameter is not supported for application, campaign, and
-- journey metrics.
listTemplateVersions_nextToken :: Lens.Lens' ListTemplateVersions (Prelude.Maybe Prelude.Text)
listTemplateVersions_nextToken :: Lens' ListTemplateVersions (Maybe Text)
listTemplateVersions_nextToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListTemplateVersions' {Maybe Text
nextToken :: Maybe Text
$sel:nextToken:ListTemplateVersions' :: ListTemplateVersions -> Maybe Text
nextToken} -> Maybe Text
nextToken) (\s :: ListTemplateVersions
s@ListTemplateVersions' {} Maybe Text
a -> ListTemplateVersions
s {$sel:nextToken:ListTemplateVersions' :: Maybe Text
nextToken = Maybe Text
a} :: ListTemplateVersions)

-- | The maximum number of items to include in each page of a paginated
-- response. This parameter is not supported for application, campaign, and
-- journey metrics.
listTemplateVersions_pageSize :: Lens.Lens' ListTemplateVersions (Prelude.Maybe Prelude.Text)
listTemplateVersions_pageSize :: Lens' ListTemplateVersions (Maybe Text)
listTemplateVersions_pageSize = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListTemplateVersions' {Maybe Text
pageSize :: Maybe Text
$sel:pageSize:ListTemplateVersions' :: ListTemplateVersions -> Maybe Text
pageSize} -> Maybe Text
pageSize) (\s :: ListTemplateVersions
s@ListTemplateVersions' {} Maybe Text
a -> ListTemplateVersions
s {$sel:pageSize:ListTemplateVersions' :: Maybe Text
pageSize = Maybe Text
a} :: ListTemplateVersions)

-- | The name of the message template. A template name must start with an
-- alphanumeric character and can contain a maximum of 128 characters. The
-- characters can be alphanumeric characters, underscores (_), or hyphens
-- (-). Template names are case sensitive.
listTemplateVersions_templateName :: Lens.Lens' ListTemplateVersions Prelude.Text
listTemplateVersions_templateName :: Lens' ListTemplateVersions Text
listTemplateVersions_templateName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListTemplateVersions' {Text
templateName :: Text
$sel:templateName:ListTemplateVersions' :: ListTemplateVersions -> Text
templateName} -> Text
templateName) (\s :: ListTemplateVersions
s@ListTemplateVersions' {} Text
a -> ListTemplateVersions
s {$sel:templateName:ListTemplateVersions' :: Text
templateName = Text
a} :: ListTemplateVersions)

-- | The type of channel that the message template is designed for. Valid
-- values are: EMAIL, PUSH, SMS, and VOICE.
listTemplateVersions_templateType :: Lens.Lens' ListTemplateVersions Prelude.Text
listTemplateVersions_templateType :: Lens' ListTemplateVersions Text
listTemplateVersions_templateType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListTemplateVersions' {Text
templateType :: Text
$sel:templateType:ListTemplateVersions' :: ListTemplateVersions -> Text
templateType} -> Text
templateType) (\s :: ListTemplateVersions
s@ListTemplateVersions' {} Text
a -> ListTemplateVersions
s {$sel:templateType:ListTemplateVersions' :: Text
templateType = Text
a} :: ListTemplateVersions)

instance Core.AWSRequest ListTemplateVersions where
  type
    AWSResponse ListTemplateVersions =
      ListTemplateVersionsResponse
  request :: (Service -> Service)
-> ListTemplateVersions -> Request ListTemplateVersions
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 ListTemplateVersions
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse ListTemplateVersions)))
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 -> TemplateVersionsResponse -> ListTemplateVersionsResponse
ListTemplateVersionsResponse'
            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.<*> (forall a. FromJSON a => Object -> Either String a
Data.eitherParseJSON Object
x)
      )

instance Prelude.Hashable ListTemplateVersions where
  hashWithSalt :: Int -> ListTemplateVersions -> Int
hashWithSalt Int
_salt ListTemplateVersions' {Maybe Text
Text
templateType :: Text
templateName :: Text
pageSize :: Maybe Text
nextToken :: Maybe Text
$sel:templateType:ListTemplateVersions' :: ListTemplateVersions -> Text
$sel:templateName:ListTemplateVersions' :: ListTemplateVersions -> Text
$sel:pageSize:ListTemplateVersions' :: ListTemplateVersions -> Maybe Text
$sel:nextToken:ListTemplateVersions' :: ListTemplateVersions -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
nextToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
pageSize
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
templateName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
templateType

instance Prelude.NFData ListTemplateVersions where
  rnf :: ListTemplateVersions -> ()
rnf ListTemplateVersions' {Maybe Text
Text
templateType :: Text
templateName :: Text
pageSize :: Maybe Text
nextToken :: Maybe Text
$sel:templateType:ListTemplateVersions' :: ListTemplateVersions -> Text
$sel:templateName:ListTemplateVersions' :: ListTemplateVersions -> Text
$sel:pageSize:ListTemplateVersions' :: ListTemplateVersions -> Maybe Text
$sel:nextToken:ListTemplateVersions' :: ListTemplateVersions -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
nextToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
pageSize
      seq :: forall a b. a -> b -> b
`Prelude.seq` 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
templateType

instance Data.ToHeaders ListTemplateVersions where
  toHeaders :: ListTemplateVersions -> 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 ListTemplateVersions where
  toPath :: ListTemplateVersions -> ByteString
toPath ListTemplateVersions' {Maybe Text
Text
templateType :: Text
templateName :: Text
pageSize :: Maybe Text
nextToken :: Maybe Text
$sel:templateType:ListTemplateVersions' :: ListTemplateVersions -> Text
$sel:templateName:ListTemplateVersions' :: ListTemplateVersions -> Text
$sel:pageSize:ListTemplateVersions' :: ListTemplateVersions -> Maybe Text
$sel:nextToken:ListTemplateVersions' :: ListTemplateVersions -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/v1/templates/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
templateName,
        ByteString
"/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
templateType,
        ByteString
"/versions"
      ]

instance Data.ToQuery ListTemplateVersions where
  toQuery :: ListTemplateVersions -> QueryString
toQuery ListTemplateVersions' {Maybe Text
Text
templateType :: Text
templateName :: Text
pageSize :: Maybe Text
nextToken :: Maybe Text
$sel:templateType:ListTemplateVersions' :: ListTemplateVersions -> Text
$sel:templateName:ListTemplateVersions' :: ListTemplateVersions -> Text
$sel:pageSize:ListTemplateVersions' :: ListTemplateVersions -> Maybe Text
$sel:nextToken:ListTemplateVersions' :: ListTemplateVersions -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"next-token" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
nextToken,
        ByteString
"page-size" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
pageSize
      ]

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

-- |
-- Create a value of 'ListTemplateVersionsResponse' 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', 'listTemplateVersionsResponse_httpStatus' - The response's http status code.
--
-- 'templateVersionsResponse', 'listTemplateVersionsResponse_templateVersionsResponse' - Undocumented member.
newListTemplateVersionsResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'templateVersionsResponse'
  TemplateVersionsResponse ->
  ListTemplateVersionsResponse
newListTemplateVersionsResponse :: Int -> TemplateVersionsResponse -> ListTemplateVersionsResponse
newListTemplateVersionsResponse
  Int
pHttpStatus_
  TemplateVersionsResponse
pTemplateVersionsResponse_ =
    ListTemplateVersionsResponse'
      { $sel:httpStatus:ListTemplateVersionsResponse' :: Int
httpStatus =
          Int
pHttpStatus_,
        $sel:templateVersionsResponse:ListTemplateVersionsResponse' :: TemplateVersionsResponse
templateVersionsResponse =
          TemplateVersionsResponse
pTemplateVersionsResponse_
      }

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

-- | Undocumented member.
listTemplateVersionsResponse_templateVersionsResponse :: Lens.Lens' ListTemplateVersionsResponse TemplateVersionsResponse
listTemplateVersionsResponse_templateVersionsResponse :: Lens' ListTemplateVersionsResponse TemplateVersionsResponse
listTemplateVersionsResponse_templateVersionsResponse = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ListTemplateVersionsResponse' {TemplateVersionsResponse
templateVersionsResponse :: TemplateVersionsResponse
$sel:templateVersionsResponse:ListTemplateVersionsResponse' :: ListTemplateVersionsResponse -> TemplateVersionsResponse
templateVersionsResponse} -> TemplateVersionsResponse
templateVersionsResponse) (\s :: ListTemplateVersionsResponse
s@ListTemplateVersionsResponse' {} TemplateVersionsResponse
a -> ListTemplateVersionsResponse
s {$sel:templateVersionsResponse:ListTemplateVersionsResponse' :: TemplateVersionsResponse
templateVersionsResponse = TemplateVersionsResponse
a} :: ListTemplateVersionsResponse)

instance Prelude.NFData ListTemplateVersionsResponse where
  rnf :: ListTemplateVersionsResponse -> ()
rnf ListTemplateVersionsResponse' {Int
TemplateVersionsResponse
templateVersionsResponse :: TemplateVersionsResponse
httpStatus :: Int
$sel:templateVersionsResponse:ListTemplateVersionsResponse' :: ListTemplateVersionsResponse -> TemplateVersionsResponse
$sel:httpStatus:ListTemplateVersionsResponse' :: ListTemplateVersionsResponse -> 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 TemplateVersionsResponse
templateVersionsResponse