{-# 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.IoT.CreateProvisioningTemplate
-- 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 provisioning template.
--
-- Requires permission to access the
-- <https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions CreateProvisioningTemplate>
-- action.
module Amazonka.IoT.CreateProvisioningTemplate
  ( -- * Creating a Request
    CreateProvisioningTemplate (..),
    newCreateProvisioningTemplate,

    -- * Request Lenses
    createProvisioningTemplate_description,
    createProvisioningTemplate_enabled,
    createProvisioningTemplate_preProvisioningHook,
    createProvisioningTemplate_tags,
    createProvisioningTemplate_type,
    createProvisioningTemplate_templateName,
    createProvisioningTemplate_templateBody,
    createProvisioningTemplate_provisioningRoleArn,

    -- * Destructuring the Response
    CreateProvisioningTemplateResponse (..),
    newCreateProvisioningTemplateResponse,

    -- * Response Lenses
    createProvisioningTemplateResponse_defaultVersionId,
    createProvisioningTemplateResponse_templateArn,
    createProvisioningTemplateResponse_templateName,
    createProvisioningTemplateResponse_httpStatus,
  )
where

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

-- | /See:/ 'newCreateProvisioningTemplate' smart constructor.
data CreateProvisioningTemplate = CreateProvisioningTemplate'
  { -- | The description of the provisioning template.
    CreateProvisioningTemplate -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | True to enable the provisioning template, otherwise false.
    CreateProvisioningTemplate -> Maybe Bool
enabled :: Prelude.Maybe Prelude.Bool,
    -- | Creates a pre-provisioning hook template. Only supports template of type
    -- @FLEET_PROVISIONING@. For more information about provisioning template
    -- types, see
    -- <https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningTemplate.html#iot-CreateProvisioningTemplate-request-type type>.
    CreateProvisioningTemplate -> Maybe ProvisioningHook
preProvisioningHook :: Prelude.Maybe ProvisioningHook,
    -- | Metadata which can be used to manage the provisioning template.
    --
    -- For URI Request parameters use format: ...key1=value1&key2=value2...
    --
    -- For the CLI command-line parameter use format: &&tags
    -- \"key1=value1&key2=value2...\"
    --
    -- For the cli-input-json file use format: \"tags\":
    -- \"key1=value1&key2=value2...\"
    CreateProvisioningTemplate -> Maybe [Tag]
tags :: Prelude.Maybe [Tag],
    -- | The type you define in a provisioning template. You can create a
    -- template with only one type. You can\'t change the template type after
    -- its creation. The default value is @FLEET_PROVISIONING@. For more
    -- information about provisioning template, see:
    -- <https://docs.aws.amazon.com/iot/latest/developerguide/provision-template.html Provisioning template>.
    CreateProvisioningTemplate -> Maybe TemplateType
type' :: Prelude.Maybe TemplateType,
    -- | The name of the provisioning template.
    CreateProvisioningTemplate -> Text
templateName :: Prelude.Text,
    -- | The JSON formatted contents of the provisioning template.
    CreateProvisioningTemplate -> Text
templateBody :: Prelude.Text,
    -- | The role ARN for the role associated with the provisioning template.
    -- This IoT role grants permission to provision a device.
    CreateProvisioningTemplate -> Text
provisioningRoleArn :: Prelude.Text
  }
  deriving (CreateProvisioningTemplate -> CreateProvisioningTemplate -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateProvisioningTemplate -> CreateProvisioningTemplate -> Bool
$c/= :: CreateProvisioningTemplate -> CreateProvisioningTemplate -> Bool
== :: CreateProvisioningTemplate -> CreateProvisioningTemplate -> Bool
$c== :: CreateProvisioningTemplate -> CreateProvisioningTemplate -> Bool
Prelude.Eq, ReadPrec [CreateProvisioningTemplate]
ReadPrec CreateProvisioningTemplate
Int -> ReadS CreateProvisioningTemplate
ReadS [CreateProvisioningTemplate]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateProvisioningTemplate]
$creadListPrec :: ReadPrec [CreateProvisioningTemplate]
readPrec :: ReadPrec CreateProvisioningTemplate
$creadPrec :: ReadPrec CreateProvisioningTemplate
readList :: ReadS [CreateProvisioningTemplate]
$creadList :: ReadS [CreateProvisioningTemplate]
readsPrec :: Int -> ReadS CreateProvisioningTemplate
$creadsPrec :: Int -> ReadS CreateProvisioningTemplate
Prelude.Read, Int -> CreateProvisioningTemplate -> ShowS
[CreateProvisioningTemplate] -> ShowS
CreateProvisioningTemplate -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateProvisioningTemplate] -> ShowS
$cshowList :: [CreateProvisioningTemplate] -> ShowS
show :: CreateProvisioningTemplate -> String
$cshow :: CreateProvisioningTemplate -> String
showsPrec :: Int -> CreateProvisioningTemplate -> ShowS
$cshowsPrec :: Int -> CreateProvisioningTemplate -> ShowS
Prelude.Show, forall x.
Rep CreateProvisioningTemplate x -> CreateProvisioningTemplate
forall x.
CreateProvisioningTemplate -> Rep CreateProvisioningTemplate x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreateProvisioningTemplate x -> CreateProvisioningTemplate
$cfrom :: forall x.
CreateProvisioningTemplate -> Rep CreateProvisioningTemplate x
Prelude.Generic)

-- |
-- Create a value of 'CreateProvisioningTemplate' 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:
--
-- 'description', 'createProvisioningTemplate_description' - The description of the provisioning template.
--
-- 'enabled', 'createProvisioningTemplate_enabled' - True to enable the provisioning template, otherwise false.
--
-- 'preProvisioningHook', 'createProvisioningTemplate_preProvisioningHook' - Creates a pre-provisioning hook template. Only supports template of type
-- @FLEET_PROVISIONING@. For more information about provisioning template
-- types, see
-- <https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningTemplate.html#iot-CreateProvisioningTemplate-request-type type>.
--
-- 'tags', 'createProvisioningTemplate_tags' - Metadata which can be used to manage the provisioning template.
--
-- For URI Request parameters use format: ...key1=value1&key2=value2...
--
-- For the CLI command-line parameter use format: &&tags
-- \"key1=value1&key2=value2...\"
--
-- For the cli-input-json file use format: \"tags\":
-- \"key1=value1&key2=value2...\"
--
-- 'type'', 'createProvisioningTemplate_type' - The type you define in a provisioning template. You can create a
-- template with only one type. You can\'t change the template type after
-- its creation. The default value is @FLEET_PROVISIONING@. For more
-- information about provisioning template, see:
-- <https://docs.aws.amazon.com/iot/latest/developerguide/provision-template.html Provisioning template>.
--
-- 'templateName', 'createProvisioningTemplate_templateName' - The name of the provisioning template.
--
-- 'templateBody', 'createProvisioningTemplate_templateBody' - The JSON formatted contents of the provisioning template.
--
-- 'provisioningRoleArn', 'createProvisioningTemplate_provisioningRoleArn' - The role ARN for the role associated with the provisioning template.
-- This IoT role grants permission to provision a device.
newCreateProvisioningTemplate ::
  -- | 'templateName'
  Prelude.Text ->
  -- | 'templateBody'
  Prelude.Text ->
  -- | 'provisioningRoleArn'
  Prelude.Text ->
  CreateProvisioningTemplate
newCreateProvisioningTemplate :: Text -> Text -> Text -> CreateProvisioningTemplate
newCreateProvisioningTemplate
  Text
pTemplateName_
  Text
pTemplateBody_
  Text
pProvisioningRoleArn_ =
    CreateProvisioningTemplate'
      { $sel:description:CreateProvisioningTemplate' :: Maybe Text
description =
          forall a. Maybe a
Prelude.Nothing,
        $sel:enabled:CreateProvisioningTemplate' :: Maybe Bool
enabled = forall a. Maybe a
Prelude.Nothing,
        $sel:preProvisioningHook:CreateProvisioningTemplate' :: Maybe ProvisioningHook
preProvisioningHook = forall a. Maybe a
Prelude.Nothing,
        $sel:tags:CreateProvisioningTemplate' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing,
        $sel:type':CreateProvisioningTemplate' :: Maybe TemplateType
type' = forall a. Maybe a
Prelude.Nothing,
        $sel:templateName:CreateProvisioningTemplate' :: Text
templateName = Text
pTemplateName_,
        $sel:templateBody:CreateProvisioningTemplate' :: Text
templateBody = Text
pTemplateBody_,
        $sel:provisioningRoleArn:CreateProvisioningTemplate' :: Text
provisioningRoleArn = Text
pProvisioningRoleArn_
      }

-- | The description of the provisioning template.
createProvisioningTemplate_description :: Lens.Lens' CreateProvisioningTemplate (Prelude.Maybe Prelude.Text)
createProvisioningTemplate_description :: Lens' CreateProvisioningTemplate (Maybe Text)
createProvisioningTemplate_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateProvisioningTemplate' {Maybe Text
description :: Maybe Text
$sel:description:CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Maybe Text
description} -> Maybe Text
description) (\s :: CreateProvisioningTemplate
s@CreateProvisioningTemplate' {} Maybe Text
a -> CreateProvisioningTemplate
s {$sel:description:CreateProvisioningTemplate' :: Maybe Text
description = Maybe Text
a} :: CreateProvisioningTemplate)

-- | True to enable the provisioning template, otherwise false.
createProvisioningTemplate_enabled :: Lens.Lens' CreateProvisioningTemplate (Prelude.Maybe Prelude.Bool)
createProvisioningTemplate_enabled :: Lens' CreateProvisioningTemplate (Maybe Bool)
createProvisioningTemplate_enabled = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateProvisioningTemplate' {Maybe Bool
enabled :: Maybe Bool
$sel:enabled:CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Maybe Bool
enabled} -> Maybe Bool
enabled) (\s :: CreateProvisioningTemplate
s@CreateProvisioningTemplate' {} Maybe Bool
a -> CreateProvisioningTemplate
s {$sel:enabled:CreateProvisioningTemplate' :: Maybe Bool
enabled = Maybe Bool
a} :: CreateProvisioningTemplate)

-- | Creates a pre-provisioning hook template. Only supports template of type
-- @FLEET_PROVISIONING@. For more information about provisioning template
-- types, see
-- <https://docs.aws.amazon.com/iot/latest/apireference/API_CreateProvisioningTemplate.html#iot-CreateProvisioningTemplate-request-type type>.
createProvisioningTemplate_preProvisioningHook :: Lens.Lens' CreateProvisioningTemplate (Prelude.Maybe ProvisioningHook)
createProvisioningTemplate_preProvisioningHook :: Lens' CreateProvisioningTemplate (Maybe ProvisioningHook)
createProvisioningTemplate_preProvisioningHook = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateProvisioningTemplate' {Maybe ProvisioningHook
preProvisioningHook :: Maybe ProvisioningHook
$sel:preProvisioningHook:CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Maybe ProvisioningHook
preProvisioningHook} -> Maybe ProvisioningHook
preProvisioningHook) (\s :: CreateProvisioningTemplate
s@CreateProvisioningTemplate' {} Maybe ProvisioningHook
a -> CreateProvisioningTemplate
s {$sel:preProvisioningHook:CreateProvisioningTemplate' :: Maybe ProvisioningHook
preProvisioningHook = Maybe ProvisioningHook
a} :: CreateProvisioningTemplate)

-- | Metadata which can be used to manage the provisioning template.
--
-- For URI Request parameters use format: ...key1=value1&key2=value2...
--
-- For the CLI command-line parameter use format: &&tags
-- \"key1=value1&key2=value2...\"
--
-- For the cli-input-json file use format: \"tags\":
-- \"key1=value1&key2=value2...\"
createProvisioningTemplate_tags :: Lens.Lens' CreateProvisioningTemplate (Prelude.Maybe [Tag])
createProvisioningTemplate_tags :: Lens' CreateProvisioningTemplate (Maybe [Tag])
createProvisioningTemplate_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateProvisioningTemplate' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: CreateProvisioningTemplate
s@CreateProvisioningTemplate' {} Maybe [Tag]
a -> CreateProvisioningTemplate
s {$sel:tags:CreateProvisioningTemplate' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: CreateProvisioningTemplate) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The type you define in a provisioning template. You can create a
-- template with only one type. You can\'t change the template type after
-- its creation. The default value is @FLEET_PROVISIONING@. For more
-- information about provisioning template, see:
-- <https://docs.aws.amazon.com/iot/latest/developerguide/provision-template.html Provisioning template>.
createProvisioningTemplate_type :: Lens.Lens' CreateProvisioningTemplate (Prelude.Maybe TemplateType)
createProvisioningTemplate_type :: Lens' CreateProvisioningTemplate (Maybe TemplateType)
createProvisioningTemplate_type = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateProvisioningTemplate' {Maybe TemplateType
type' :: Maybe TemplateType
$sel:type':CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Maybe TemplateType
type'} -> Maybe TemplateType
type') (\s :: CreateProvisioningTemplate
s@CreateProvisioningTemplate' {} Maybe TemplateType
a -> CreateProvisioningTemplate
s {$sel:type':CreateProvisioningTemplate' :: Maybe TemplateType
type' = Maybe TemplateType
a} :: CreateProvisioningTemplate)

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

-- | The JSON formatted contents of the provisioning template.
createProvisioningTemplate_templateBody :: Lens.Lens' CreateProvisioningTemplate Prelude.Text
createProvisioningTemplate_templateBody :: Lens' CreateProvisioningTemplate Text
createProvisioningTemplate_templateBody = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateProvisioningTemplate' {Text
templateBody :: Text
$sel:templateBody:CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Text
templateBody} -> Text
templateBody) (\s :: CreateProvisioningTemplate
s@CreateProvisioningTemplate' {} Text
a -> CreateProvisioningTemplate
s {$sel:templateBody:CreateProvisioningTemplate' :: Text
templateBody = Text
a} :: CreateProvisioningTemplate)

-- | The role ARN for the role associated with the provisioning template.
-- This IoT role grants permission to provision a device.
createProvisioningTemplate_provisioningRoleArn :: Lens.Lens' CreateProvisioningTemplate Prelude.Text
createProvisioningTemplate_provisioningRoleArn :: Lens' CreateProvisioningTemplate Text
createProvisioningTemplate_provisioningRoleArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateProvisioningTemplate' {Text
provisioningRoleArn :: Text
$sel:provisioningRoleArn:CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Text
provisioningRoleArn} -> Text
provisioningRoleArn) (\s :: CreateProvisioningTemplate
s@CreateProvisioningTemplate' {} Text
a -> CreateProvisioningTemplate
s {$sel:provisioningRoleArn:CreateProvisioningTemplate' :: Text
provisioningRoleArn = Text
a} :: CreateProvisioningTemplate)

instance Core.AWSRequest CreateProvisioningTemplate where
  type
    AWSResponse CreateProvisioningTemplate =
      CreateProvisioningTemplateResponse
  request :: (Service -> Service)
-> CreateProvisioningTemplate -> Request CreateProvisioningTemplate
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 CreateProvisioningTemplate
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse CreateProvisioningTemplate)))
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 ->
          Maybe Int
-> Maybe Text
-> Maybe Text
-> Int
-> CreateProvisioningTemplateResponse
CreateProvisioningTemplateResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"defaultVersionId")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"templateArn")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"templateName")
            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 CreateProvisioningTemplate where
  hashWithSalt :: Int -> CreateProvisioningTemplate -> Int
hashWithSalt Int
_salt CreateProvisioningTemplate' {Maybe Bool
Maybe [Tag]
Maybe Text
Maybe ProvisioningHook
Maybe TemplateType
Text
provisioningRoleArn :: Text
templateBody :: Text
templateName :: Text
type' :: Maybe TemplateType
tags :: Maybe [Tag]
preProvisioningHook :: Maybe ProvisioningHook
enabled :: Maybe Bool
description :: Maybe Text
$sel:provisioningRoleArn:CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Text
$sel:templateBody:CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Text
$sel:templateName:CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Text
$sel:type':CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Maybe TemplateType
$sel:tags:CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Maybe [Tag]
$sel:preProvisioningHook:CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Maybe ProvisioningHook
$sel:enabled:CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Maybe Bool
$sel:description:CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
enabled
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ProvisioningHook
preProvisioningHook
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TemplateType
type'
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
templateName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
templateBody
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
provisioningRoleArn

instance Prelude.NFData CreateProvisioningTemplate where
  rnf :: CreateProvisioningTemplate -> ()
rnf CreateProvisioningTemplate' {Maybe Bool
Maybe [Tag]
Maybe Text
Maybe ProvisioningHook
Maybe TemplateType
Text
provisioningRoleArn :: Text
templateBody :: Text
templateName :: Text
type' :: Maybe TemplateType
tags :: Maybe [Tag]
preProvisioningHook :: Maybe ProvisioningHook
enabled :: Maybe Bool
description :: Maybe Text
$sel:provisioningRoleArn:CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Text
$sel:templateBody:CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Text
$sel:templateName:CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Text
$sel:type':CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Maybe TemplateType
$sel:tags:CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Maybe [Tag]
$sel:preProvisioningHook:CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Maybe ProvisioningHook
$sel:enabled:CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Maybe Bool
$sel:description:CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
description
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
enabled
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ProvisioningHook
preProvisioningHook
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Tag]
tags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TemplateType
type'
      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
templateBody
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
provisioningRoleArn

instance Data.ToHeaders CreateProvisioningTemplate where
  toHeaders :: CreateProvisioningTemplate -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

instance Data.ToJSON CreateProvisioningTemplate where
  toJSON :: CreateProvisioningTemplate -> Value
toJSON CreateProvisioningTemplate' {Maybe Bool
Maybe [Tag]
Maybe Text
Maybe ProvisioningHook
Maybe TemplateType
Text
provisioningRoleArn :: Text
templateBody :: Text
templateName :: Text
type' :: Maybe TemplateType
tags :: Maybe [Tag]
preProvisioningHook :: Maybe ProvisioningHook
enabled :: Maybe Bool
description :: Maybe Text
$sel:provisioningRoleArn:CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Text
$sel:templateBody:CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Text
$sel:templateName:CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Text
$sel:type':CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Maybe TemplateType
$sel:tags:CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Maybe [Tag]
$sel:preProvisioningHook:CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Maybe ProvisioningHook
$sel:enabled:CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Maybe Bool
$sel:description:CreateProvisioningTemplate' :: CreateProvisioningTemplate -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"description" 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 Text
description,
            (Key
"enabled" 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
enabled,
            (Key
"preProvisioningHook" 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 ProvisioningHook
preProvisioningHook,
            (Key
"tags" 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 [Tag]
tags,
            (Key
"type" 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 TemplateType
type',
            forall a. a -> Maybe a
Prelude.Just (Key
"templateName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
templateName),
            forall a. a -> Maybe a
Prelude.Just (Key
"templateBody" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
templateBody),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"provisioningRoleArn" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
provisioningRoleArn)
          ]
      )

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

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

-- | /See:/ 'newCreateProvisioningTemplateResponse' smart constructor.
data CreateProvisioningTemplateResponse = CreateProvisioningTemplateResponse'
  { -- | The default version of the provisioning template.
    CreateProvisioningTemplateResponse -> Maybe Int
defaultVersionId :: Prelude.Maybe Prelude.Int,
    -- | The ARN that identifies the provisioning template.
    CreateProvisioningTemplateResponse -> Maybe Text
templateArn :: Prelude.Maybe Prelude.Text,
    -- | The name of the provisioning template.
    CreateProvisioningTemplateResponse -> Maybe Text
templateName :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    CreateProvisioningTemplateResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (CreateProvisioningTemplateResponse
-> CreateProvisioningTemplateResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateProvisioningTemplateResponse
-> CreateProvisioningTemplateResponse -> Bool
$c/= :: CreateProvisioningTemplateResponse
-> CreateProvisioningTemplateResponse -> Bool
== :: CreateProvisioningTemplateResponse
-> CreateProvisioningTemplateResponse -> Bool
$c== :: CreateProvisioningTemplateResponse
-> CreateProvisioningTemplateResponse -> Bool
Prelude.Eq, ReadPrec [CreateProvisioningTemplateResponse]
ReadPrec CreateProvisioningTemplateResponse
Int -> ReadS CreateProvisioningTemplateResponse
ReadS [CreateProvisioningTemplateResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateProvisioningTemplateResponse]
$creadListPrec :: ReadPrec [CreateProvisioningTemplateResponse]
readPrec :: ReadPrec CreateProvisioningTemplateResponse
$creadPrec :: ReadPrec CreateProvisioningTemplateResponse
readList :: ReadS [CreateProvisioningTemplateResponse]
$creadList :: ReadS [CreateProvisioningTemplateResponse]
readsPrec :: Int -> ReadS CreateProvisioningTemplateResponse
$creadsPrec :: Int -> ReadS CreateProvisioningTemplateResponse
Prelude.Read, Int -> CreateProvisioningTemplateResponse -> ShowS
[CreateProvisioningTemplateResponse] -> ShowS
CreateProvisioningTemplateResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateProvisioningTemplateResponse] -> ShowS
$cshowList :: [CreateProvisioningTemplateResponse] -> ShowS
show :: CreateProvisioningTemplateResponse -> String
$cshow :: CreateProvisioningTemplateResponse -> String
showsPrec :: Int -> CreateProvisioningTemplateResponse -> ShowS
$cshowsPrec :: Int -> CreateProvisioningTemplateResponse -> ShowS
Prelude.Show, forall x.
Rep CreateProvisioningTemplateResponse x
-> CreateProvisioningTemplateResponse
forall x.
CreateProvisioningTemplateResponse
-> Rep CreateProvisioningTemplateResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreateProvisioningTemplateResponse x
-> CreateProvisioningTemplateResponse
$cfrom :: forall x.
CreateProvisioningTemplateResponse
-> Rep CreateProvisioningTemplateResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreateProvisioningTemplateResponse' 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:
--
-- 'defaultVersionId', 'createProvisioningTemplateResponse_defaultVersionId' - The default version of the provisioning template.
--
-- 'templateArn', 'createProvisioningTemplateResponse_templateArn' - The ARN that identifies the provisioning template.
--
-- 'templateName', 'createProvisioningTemplateResponse_templateName' - The name of the provisioning template.
--
-- 'httpStatus', 'createProvisioningTemplateResponse_httpStatus' - The response's http status code.
newCreateProvisioningTemplateResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateProvisioningTemplateResponse
newCreateProvisioningTemplateResponse :: Int -> CreateProvisioningTemplateResponse
newCreateProvisioningTemplateResponse Int
pHttpStatus_ =
  CreateProvisioningTemplateResponse'
    { $sel:defaultVersionId:CreateProvisioningTemplateResponse' :: Maybe Int
defaultVersionId =
        forall a. Maybe a
Prelude.Nothing,
      $sel:templateArn:CreateProvisioningTemplateResponse' :: Maybe Text
templateArn = forall a. Maybe a
Prelude.Nothing,
      $sel:templateName:CreateProvisioningTemplateResponse' :: Maybe Text
templateName = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CreateProvisioningTemplateResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The default version of the provisioning template.
createProvisioningTemplateResponse_defaultVersionId :: Lens.Lens' CreateProvisioningTemplateResponse (Prelude.Maybe Prelude.Int)
createProvisioningTemplateResponse_defaultVersionId :: Lens' CreateProvisioningTemplateResponse (Maybe Int)
createProvisioningTemplateResponse_defaultVersionId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateProvisioningTemplateResponse' {Maybe Int
defaultVersionId :: Maybe Int
$sel:defaultVersionId:CreateProvisioningTemplateResponse' :: CreateProvisioningTemplateResponse -> Maybe Int
defaultVersionId} -> Maybe Int
defaultVersionId) (\s :: CreateProvisioningTemplateResponse
s@CreateProvisioningTemplateResponse' {} Maybe Int
a -> CreateProvisioningTemplateResponse
s {$sel:defaultVersionId:CreateProvisioningTemplateResponse' :: Maybe Int
defaultVersionId = Maybe Int
a} :: CreateProvisioningTemplateResponse)

-- | The ARN that identifies the provisioning template.
createProvisioningTemplateResponse_templateArn :: Lens.Lens' CreateProvisioningTemplateResponse (Prelude.Maybe Prelude.Text)
createProvisioningTemplateResponse_templateArn :: Lens' CreateProvisioningTemplateResponse (Maybe Text)
createProvisioningTemplateResponse_templateArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateProvisioningTemplateResponse' {Maybe Text
templateArn :: Maybe Text
$sel:templateArn:CreateProvisioningTemplateResponse' :: CreateProvisioningTemplateResponse -> Maybe Text
templateArn} -> Maybe Text
templateArn) (\s :: CreateProvisioningTemplateResponse
s@CreateProvisioningTemplateResponse' {} Maybe Text
a -> CreateProvisioningTemplateResponse
s {$sel:templateArn:CreateProvisioningTemplateResponse' :: Maybe Text
templateArn = Maybe Text
a} :: CreateProvisioningTemplateResponse)

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

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

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