{-# 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.Proton.CreateServiceTemplate
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Create a service template. The administrator creates a service template
-- to define standardized infrastructure and an optional CI\/CD service
-- pipeline. Developers, in turn, select the service template from Proton.
-- If the selected service template includes a service pipeline definition,
-- they provide a link to their source code repository. Proton then deploys
-- and manages the infrastructure defined by the selected service template.
-- For more information, see
-- <https://docs.aws.amazon.com/proton/latest/userguide/ag-templates.html Proton templates>
-- in the /Proton User Guide/.
module Amazonka.Proton.CreateServiceTemplate
  ( -- * Creating a Request
    CreateServiceTemplate (..),
    newCreateServiceTemplate,

    -- * Request Lenses
    createServiceTemplate_description,
    createServiceTemplate_displayName,
    createServiceTemplate_encryptionKey,
    createServiceTemplate_pipelineProvisioning,
    createServiceTemplate_tags,
    createServiceTemplate_name,

    -- * Destructuring the Response
    CreateServiceTemplateResponse (..),
    newCreateServiceTemplateResponse,

    -- * Response Lenses
    createServiceTemplateResponse_httpStatus,
    createServiceTemplateResponse_serviceTemplate,
  )
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 Amazonka.Proton.Types
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newCreateServiceTemplate' smart constructor.
data CreateServiceTemplate = CreateServiceTemplate'
  { -- | A description of the service template.
    CreateServiceTemplate -> Maybe (Sensitive Text)
description :: Prelude.Maybe (Data.Sensitive Prelude.Text),
    -- | The name of the service template as displayed in the developer
    -- interface.
    CreateServiceTemplate -> Maybe (Sensitive Text)
displayName :: Prelude.Maybe (Data.Sensitive Prelude.Text),
    -- | A customer provided encryption key that\'s used to encrypt data.
    CreateServiceTemplate -> Maybe Text
encryptionKey :: Prelude.Maybe Prelude.Text,
    -- | By default, Proton provides a service pipeline for your service. When
    -- this parameter is included, it indicates that an Proton service pipeline
    -- /isn\'t/ provided for your service. After it\'s included, it /can\'t/ be
    -- changed. For more information, see
    -- <https://docs.aws.amazon.com/proton/latest/userguide/ag-template-authoring.html#ag-template-bundles Template bundles>
    -- in the /Proton User Guide/.
    CreateServiceTemplate -> Maybe Provisioning
pipelineProvisioning :: Prelude.Maybe Provisioning,
    -- | An optional list of metadata items that you can associate with the
    -- Proton service template. A tag is a key-value pair.
    --
    -- For more information, see
    -- <https://docs.aws.amazon.com/proton/latest/userguide/resources.html Proton resources and tagging>
    -- in the /Proton User Guide/.
    CreateServiceTemplate -> Maybe [Tag]
tags :: Prelude.Maybe [Tag],
    -- | The name of the service template.
    CreateServiceTemplate -> Text
name :: Prelude.Text
  }
  deriving (CreateServiceTemplate -> CreateServiceTemplate -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateServiceTemplate -> CreateServiceTemplate -> Bool
$c/= :: CreateServiceTemplate -> CreateServiceTemplate -> Bool
== :: CreateServiceTemplate -> CreateServiceTemplate -> Bool
$c== :: CreateServiceTemplate -> CreateServiceTemplate -> Bool
Prelude.Eq, Int -> CreateServiceTemplate -> ShowS
[CreateServiceTemplate] -> ShowS
CreateServiceTemplate -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateServiceTemplate] -> ShowS
$cshowList :: [CreateServiceTemplate] -> ShowS
show :: CreateServiceTemplate -> String
$cshow :: CreateServiceTemplate -> String
showsPrec :: Int -> CreateServiceTemplate -> ShowS
$cshowsPrec :: Int -> CreateServiceTemplate -> ShowS
Prelude.Show, forall x. Rep CreateServiceTemplate x -> CreateServiceTemplate
forall x. CreateServiceTemplate -> Rep CreateServiceTemplate x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateServiceTemplate x -> CreateServiceTemplate
$cfrom :: forall x. CreateServiceTemplate -> Rep CreateServiceTemplate x
Prelude.Generic)

-- |
-- Create a value of 'CreateServiceTemplate' 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', 'createServiceTemplate_description' - A description of the service template.
--
-- 'displayName', 'createServiceTemplate_displayName' - The name of the service template as displayed in the developer
-- interface.
--
-- 'encryptionKey', 'createServiceTemplate_encryptionKey' - A customer provided encryption key that\'s used to encrypt data.
--
-- 'pipelineProvisioning', 'createServiceTemplate_pipelineProvisioning' - By default, Proton provides a service pipeline for your service. When
-- this parameter is included, it indicates that an Proton service pipeline
-- /isn\'t/ provided for your service. After it\'s included, it /can\'t/ be
-- changed. For more information, see
-- <https://docs.aws.amazon.com/proton/latest/userguide/ag-template-authoring.html#ag-template-bundles Template bundles>
-- in the /Proton User Guide/.
--
-- 'tags', 'createServiceTemplate_tags' - An optional list of metadata items that you can associate with the
-- Proton service template. A tag is a key-value pair.
--
-- For more information, see
-- <https://docs.aws.amazon.com/proton/latest/userguide/resources.html Proton resources and tagging>
-- in the /Proton User Guide/.
--
-- 'name', 'createServiceTemplate_name' - The name of the service template.
newCreateServiceTemplate ::
  -- | 'name'
  Prelude.Text ->
  CreateServiceTemplate
newCreateServiceTemplate :: Text -> CreateServiceTemplate
newCreateServiceTemplate Text
pName_ =
  CreateServiceTemplate'
    { $sel:description:CreateServiceTemplate' :: Maybe (Sensitive Text)
description =
        forall a. Maybe a
Prelude.Nothing,
      $sel:displayName:CreateServiceTemplate' :: Maybe (Sensitive Text)
displayName = forall a. Maybe a
Prelude.Nothing,
      $sel:encryptionKey:CreateServiceTemplate' :: Maybe Text
encryptionKey = forall a. Maybe a
Prelude.Nothing,
      $sel:pipelineProvisioning:CreateServiceTemplate' :: Maybe Provisioning
pipelineProvisioning = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:CreateServiceTemplate' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing,
      $sel:name:CreateServiceTemplate' :: Text
name = Text
pName_
    }

-- | A description of the service template.
createServiceTemplate_description :: Lens.Lens' CreateServiceTemplate (Prelude.Maybe Prelude.Text)
createServiceTemplate_description :: Lens' CreateServiceTemplate (Maybe Text)
createServiceTemplate_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateServiceTemplate' {Maybe (Sensitive Text)
description :: Maybe (Sensitive Text)
$sel:description:CreateServiceTemplate' :: CreateServiceTemplate -> Maybe (Sensitive Text)
description} -> Maybe (Sensitive Text)
description) (\s :: CreateServiceTemplate
s@CreateServiceTemplate' {} Maybe (Sensitive Text)
a -> CreateServiceTemplate
s {$sel:description:CreateServiceTemplate' :: Maybe (Sensitive Text)
description = Maybe (Sensitive Text)
a} :: CreateServiceTemplate) 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 a. Iso' (Sensitive a) a
Data._Sensitive

-- | The name of the service template as displayed in the developer
-- interface.
createServiceTemplate_displayName :: Lens.Lens' CreateServiceTemplate (Prelude.Maybe Prelude.Text)
createServiceTemplate_displayName :: Lens' CreateServiceTemplate (Maybe Text)
createServiceTemplate_displayName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateServiceTemplate' {Maybe (Sensitive Text)
displayName :: Maybe (Sensitive Text)
$sel:displayName:CreateServiceTemplate' :: CreateServiceTemplate -> Maybe (Sensitive Text)
displayName} -> Maybe (Sensitive Text)
displayName) (\s :: CreateServiceTemplate
s@CreateServiceTemplate' {} Maybe (Sensitive Text)
a -> CreateServiceTemplate
s {$sel:displayName:CreateServiceTemplate' :: Maybe (Sensitive Text)
displayName = Maybe (Sensitive Text)
a} :: CreateServiceTemplate) 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 a. Iso' (Sensitive a) a
Data._Sensitive

-- | A customer provided encryption key that\'s used to encrypt data.
createServiceTemplate_encryptionKey :: Lens.Lens' CreateServiceTemplate (Prelude.Maybe Prelude.Text)
createServiceTemplate_encryptionKey :: Lens' CreateServiceTemplate (Maybe Text)
createServiceTemplate_encryptionKey = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateServiceTemplate' {Maybe Text
encryptionKey :: Maybe Text
$sel:encryptionKey:CreateServiceTemplate' :: CreateServiceTemplate -> Maybe Text
encryptionKey} -> Maybe Text
encryptionKey) (\s :: CreateServiceTemplate
s@CreateServiceTemplate' {} Maybe Text
a -> CreateServiceTemplate
s {$sel:encryptionKey:CreateServiceTemplate' :: Maybe Text
encryptionKey = Maybe Text
a} :: CreateServiceTemplate)

-- | By default, Proton provides a service pipeline for your service. When
-- this parameter is included, it indicates that an Proton service pipeline
-- /isn\'t/ provided for your service. After it\'s included, it /can\'t/ be
-- changed. For more information, see
-- <https://docs.aws.amazon.com/proton/latest/userguide/ag-template-authoring.html#ag-template-bundles Template bundles>
-- in the /Proton User Guide/.
createServiceTemplate_pipelineProvisioning :: Lens.Lens' CreateServiceTemplate (Prelude.Maybe Provisioning)
createServiceTemplate_pipelineProvisioning :: Lens' CreateServiceTemplate (Maybe Provisioning)
createServiceTemplate_pipelineProvisioning = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateServiceTemplate' {Maybe Provisioning
pipelineProvisioning :: Maybe Provisioning
$sel:pipelineProvisioning:CreateServiceTemplate' :: CreateServiceTemplate -> Maybe Provisioning
pipelineProvisioning} -> Maybe Provisioning
pipelineProvisioning) (\s :: CreateServiceTemplate
s@CreateServiceTemplate' {} Maybe Provisioning
a -> CreateServiceTemplate
s {$sel:pipelineProvisioning:CreateServiceTemplate' :: Maybe Provisioning
pipelineProvisioning = Maybe Provisioning
a} :: CreateServiceTemplate)

-- | An optional list of metadata items that you can associate with the
-- Proton service template. A tag is a key-value pair.
--
-- For more information, see
-- <https://docs.aws.amazon.com/proton/latest/userguide/resources.html Proton resources and tagging>
-- in the /Proton User Guide/.
createServiceTemplate_tags :: Lens.Lens' CreateServiceTemplate (Prelude.Maybe [Tag])
createServiceTemplate_tags :: Lens' CreateServiceTemplate (Maybe [Tag])
createServiceTemplate_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateServiceTemplate' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:CreateServiceTemplate' :: CreateServiceTemplate -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: CreateServiceTemplate
s@CreateServiceTemplate' {} Maybe [Tag]
a -> CreateServiceTemplate
s {$sel:tags:CreateServiceTemplate' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: CreateServiceTemplate) 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 name of the service template.
createServiceTemplate_name :: Lens.Lens' CreateServiceTemplate Prelude.Text
createServiceTemplate_name :: Lens' CreateServiceTemplate Text
createServiceTemplate_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateServiceTemplate' {Text
name :: Text
$sel:name:CreateServiceTemplate' :: CreateServiceTemplate -> Text
name} -> Text
name) (\s :: CreateServiceTemplate
s@CreateServiceTemplate' {} Text
a -> CreateServiceTemplate
s {$sel:name:CreateServiceTemplate' :: Text
name = Text
a} :: CreateServiceTemplate)

instance Core.AWSRequest CreateServiceTemplate where
  type
    AWSResponse CreateServiceTemplate =
      CreateServiceTemplateResponse
  request :: (Service -> Service)
-> CreateServiceTemplate -> Request CreateServiceTemplate
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 CreateServiceTemplate
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse CreateServiceTemplate)))
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 -> ServiceTemplate -> CreateServiceTemplateResponse
CreateServiceTemplateResponse'
            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
"serviceTemplate")
      )

instance Prelude.Hashable CreateServiceTemplate where
  hashWithSalt :: Int -> CreateServiceTemplate -> Int
hashWithSalt Int
_salt CreateServiceTemplate' {Maybe [Tag]
Maybe Text
Maybe (Sensitive Text)
Maybe Provisioning
Text
name :: Text
tags :: Maybe [Tag]
pipelineProvisioning :: Maybe Provisioning
encryptionKey :: Maybe Text
displayName :: Maybe (Sensitive Text)
description :: Maybe (Sensitive Text)
$sel:name:CreateServiceTemplate' :: CreateServiceTemplate -> Text
$sel:tags:CreateServiceTemplate' :: CreateServiceTemplate -> Maybe [Tag]
$sel:pipelineProvisioning:CreateServiceTemplate' :: CreateServiceTemplate -> Maybe Provisioning
$sel:encryptionKey:CreateServiceTemplate' :: CreateServiceTemplate -> Maybe Text
$sel:displayName:CreateServiceTemplate' :: CreateServiceTemplate -> Maybe (Sensitive Text)
$sel:description:CreateServiceTemplate' :: CreateServiceTemplate -> Maybe (Sensitive Text)
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (Sensitive Text)
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (Sensitive Text)
displayName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
encryptionKey
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Provisioning
pipelineProvisioning
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
name

instance Prelude.NFData CreateServiceTemplate where
  rnf :: CreateServiceTemplate -> ()
rnf CreateServiceTemplate' {Maybe [Tag]
Maybe Text
Maybe (Sensitive Text)
Maybe Provisioning
Text
name :: Text
tags :: Maybe [Tag]
pipelineProvisioning :: Maybe Provisioning
encryptionKey :: Maybe Text
displayName :: Maybe (Sensitive Text)
description :: Maybe (Sensitive Text)
$sel:name:CreateServiceTemplate' :: CreateServiceTemplate -> Text
$sel:tags:CreateServiceTemplate' :: CreateServiceTemplate -> Maybe [Tag]
$sel:pipelineProvisioning:CreateServiceTemplate' :: CreateServiceTemplate -> Maybe Provisioning
$sel:encryptionKey:CreateServiceTemplate' :: CreateServiceTemplate -> Maybe Text
$sel:displayName:CreateServiceTemplate' :: CreateServiceTemplate -> Maybe (Sensitive Text)
$sel:description:CreateServiceTemplate' :: CreateServiceTemplate -> Maybe (Sensitive Text)
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe (Sensitive Text)
description
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (Sensitive Text)
displayName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
encryptionKey
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Provisioning
pipelineProvisioning
      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 Text
name

instance Data.ToHeaders CreateServiceTemplate where
  toHeaders :: CreateServiceTemplate -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"X-Amz-Target"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"AwsProton20200720.CreateServiceTemplate" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.0" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON CreateServiceTemplate where
  toJSON :: CreateServiceTemplate -> Value
toJSON CreateServiceTemplate' {Maybe [Tag]
Maybe Text
Maybe (Sensitive Text)
Maybe Provisioning
Text
name :: Text
tags :: Maybe [Tag]
pipelineProvisioning :: Maybe Provisioning
encryptionKey :: Maybe Text
displayName :: Maybe (Sensitive Text)
description :: Maybe (Sensitive Text)
$sel:name:CreateServiceTemplate' :: CreateServiceTemplate -> Text
$sel:tags:CreateServiceTemplate' :: CreateServiceTemplate -> Maybe [Tag]
$sel:pipelineProvisioning:CreateServiceTemplate' :: CreateServiceTemplate -> Maybe Provisioning
$sel:encryptionKey:CreateServiceTemplate' :: CreateServiceTemplate -> Maybe Text
$sel:displayName:CreateServiceTemplate' :: CreateServiceTemplate -> Maybe (Sensitive Text)
$sel:description:CreateServiceTemplate' :: CreateServiceTemplate -> Maybe (Sensitive 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 (Sensitive Text)
description,
            (Key
"displayName" 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 (Sensitive Text)
displayName,
            (Key
"encryptionKey" 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
encryptionKey,
            (Key
"pipelineProvisioning" 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 Provisioning
pipelineProvisioning,
            (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,
            forall a. a -> Maybe a
Prelude.Just (Key
"name" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
name)
          ]
      )

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

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

-- | /See:/ 'newCreateServiceTemplateResponse' smart constructor.
data CreateServiceTemplateResponse = CreateServiceTemplateResponse'
  { -- | The response's http status code.
    CreateServiceTemplateResponse -> Int
httpStatus :: Prelude.Int,
    -- | The service template detail data that\'s returned by Proton.
    CreateServiceTemplateResponse -> ServiceTemplate
serviceTemplate :: ServiceTemplate
  }
  deriving (CreateServiceTemplateResponse
-> CreateServiceTemplateResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateServiceTemplateResponse
-> CreateServiceTemplateResponse -> Bool
$c/= :: CreateServiceTemplateResponse
-> CreateServiceTemplateResponse -> Bool
== :: CreateServiceTemplateResponse
-> CreateServiceTemplateResponse -> Bool
$c== :: CreateServiceTemplateResponse
-> CreateServiceTemplateResponse -> Bool
Prelude.Eq, Int -> CreateServiceTemplateResponse -> ShowS
[CreateServiceTemplateResponse] -> ShowS
CreateServiceTemplateResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateServiceTemplateResponse] -> ShowS
$cshowList :: [CreateServiceTemplateResponse] -> ShowS
show :: CreateServiceTemplateResponse -> String
$cshow :: CreateServiceTemplateResponse -> String
showsPrec :: Int -> CreateServiceTemplateResponse -> ShowS
$cshowsPrec :: Int -> CreateServiceTemplateResponse -> ShowS
Prelude.Show, forall x.
Rep CreateServiceTemplateResponse x
-> CreateServiceTemplateResponse
forall x.
CreateServiceTemplateResponse
-> Rep CreateServiceTemplateResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreateServiceTemplateResponse x
-> CreateServiceTemplateResponse
$cfrom :: forall x.
CreateServiceTemplateResponse
-> Rep CreateServiceTemplateResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreateServiceTemplateResponse' 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', 'createServiceTemplateResponse_httpStatus' - The response's http status code.
--
-- 'serviceTemplate', 'createServiceTemplateResponse_serviceTemplate' - The service template detail data that\'s returned by Proton.
newCreateServiceTemplateResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'serviceTemplate'
  ServiceTemplate ->
  CreateServiceTemplateResponse
newCreateServiceTemplateResponse :: Int -> ServiceTemplate -> CreateServiceTemplateResponse
newCreateServiceTemplateResponse
  Int
pHttpStatus_
  ServiceTemplate
pServiceTemplate_ =
    CreateServiceTemplateResponse'
      { $sel:httpStatus:CreateServiceTemplateResponse' :: Int
httpStatus =
          Int
pHttpStatus_,
        $sel:serviceTemplate:CreateServiceTemplateResponse' :: ServiceTemplate
serviceTemplate = ServiceTemplate
pServiceTemplate_
      }

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

-- | The service template detail data that\'s returned by Proton.
createServiceTemplateResponse_serviceTemplate :: Lens.Lens' CreateServiceTemplateResponse ServiceTemplate
createServiceTemplateResponse_serviceTemplate :: Lens' CreateServiceTemplateResponse ServiceTemplate
createServiceTemplateResponse_serviceTemplate = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateServiceTemplateResponse' {ServiceTemplate
serviceTemplate :: ServiceTemplate
$sel:serviceTemplate:CreateServiceTemplateResponse' :: CreateServiceTemplateResponse -> ServiceTemplate
serviceTemplate} -> ServiceTemplate
serviceTemplate) (\s :: CreateServiceTemplateResponse
s@CreateServiceTemplateResponse' {} ServiceTemplate
a -> CreateServiceTemplateResponse
s {$sel:serviceTemplate:CreateServiceTemplateResponse' :: ServiceTemplate
serviceTemplate = ServiceTemplate
a} :: CreateServiceTemplateResponse)

instance Prelude.NFData CreateServiceTemplateResponse where
  rnf :: CreateServiceTemplateResponse -> ()
rnf CreateServiceTemplateResponse' {Int
ServiceTemplate
serviceTemplate :: ServiceTemplate
httpStatus :: Int
$sel:serviceTemplate:CreateServiceTemplateResponse' :: CreateServiceTemplateResponse -> ServiceTemplate
$sel:httpStatus:CreateServiceTemplateResponse' :: CreateServiceTemplateResponse -> 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 ServiceTemplate
serviceTemplate