{-# 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.CreateServiceTemplateVersion
-- 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 new major or minor version of a service template. A major
-- version of a service template is a version that /isn\'t/ backward
-- compatible. A minor version of a service template is a version that\'s
-- backward compatible within its major version.
module Amazonka.Proton.CreateServiceTemplateVersion
  ( -- * Creating a Request
    CreateServiceTemplateVersion (..),
    newCreateServiceTemplateVersion,

    -- * Request Lenses
    createServiceTemplateVersion_clientToken,
    createServiceTemplateVersion_description,
    createServiceTemplateVersion_majorVersion,
    createServiceTemplateVersion_supportedComponentSources,
    createServiceTemplateVersion_tags,
    createServiceTemplateVersion_compatibleEnvironmentTemplates,
    createServiceTemplateVersion_source,
    createServiceTemplateVersion_templateName,

    -- * Destructuring the Response
    CreateServiceTemplateVersionResponse (..),
    newCreateServiceTemplateVersionResponse,

    -- * Response Lenses
    createServiceTemplateVersionResponse_httpStatus,
    createServiceTemplateVersionResponse_serviceTemplateVersion,
  )
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:/ 'newCreateServiceTemplateVersion' smart constructor.
data CreateServiceTemplateVersion = CreateServiceTemplateVersion'
  { -- | When included, if two identical requests are made with the same client
    -- token, Proton returns the service template version that the first
    -- request created.
    CreateServiceTemplateVersion -> Maybe Text
clientToken :: Prelude.Maybe Prelude.Text,
    -- | A description of the new version of a service template.
    CreateServiceTemplateVersion -> Maybe (Sensitive Text)
description :: Prelude.Maybe (Data.Sensitive Prelude.Text),
    -- | To create a new minor version of the service template, include a
    -- @major Version@.
    --
    -- To create a new major and minor version of the service template,
    -- /exclude/ @major Version@.
    CreateServiceTemplateVersion -> Maybe Text
majorVersion :: Prelude.Maybe Prelude.Text,
    -- | An array of supported component sources. Components with supported
    -- sources can be attached to service instances based on this service
    -- template version.
    --
    -- For more information about components, see
    -- <https://docs.aws.amazon.com/proton/latest/userguide/ag-components.html Proton components>
    -- in the /Proton User Guide/.
    CreateServiceTemplateVersion
-> Maybe [ServiceTemplateSupportedComponentSourceType]
supportedComponentSources :: Prelude.Maybe [ServiceTemplateSupportedComponentSourceType],
    -- | An optional list of metadata items that you can associate with the
    -- Proton service template version. 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/.
    CreateServiceTemplateVersion -> Maybe [Tag]
tags :: Prelude.Maybe [Tag],
    -- | An array of environment template objects that are compatible with the
    -- new service template version. A service instance based on this service
    -- template version can run in environments based on compatible templates.
    CreateServiceTemplateVersion
-> NonEmpty CompatibleEnvironmentTemplateInput
compatibleEnvironmentTemplates :: Prelude.NonEmpty CompatibleEnvironmentTemplateInput,
    -- | An object that includes the template bundle S3 bucket path and name for
    -- the new version of a service template.
    CreateServiceTemplateVersion -> TemplateVersionSourceInput
source :: TemplateVersionSourceInput,
    -- | The name of the service template.
    CreateServiceTemplateVersion -> Text
templateName :: Prelude.Text
  }
  deriving (CreateServiceTemplateVersion
-> CreateServiceTemplateVersion -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateServiceTemplateVersion
-> CreateServiceTemplateVersion -> Bool
$c/= :: CreateServiceTemplateVersion
-> CreateServiceTemplateVersion -> Bool
== :: CreateServiceTemplateVersion
-> CreateServiceTemplateVersion -> Bool
$c== :: CreateServiceTemplateVersion
-> CreateServiceTemplateVersion -> Bool
Prelude.Eq, Int -> CreateServiceTemplateVersion -> ShowS
[CreateServiceTemplateVersion] -> ShowS
CreateServiceTemplateVersion -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateServiceTemplateVersion] -> ShowS
$cshowList :: [CreateServiceTemplateVersion] -> ShowS
show :: CreateServiceTemplateVersion -> String
$cshow :: CreateServiceTemplateVersion -> String
showsPrec :: Int -> CreateServiceTemplateVersion -> ShowS
$cshowsPrec :: Int -> CreateServiceTemplateVersion -> ShowS
Prelude.Show, forall x.
Rep CreateServiceTemplateVersion x -> CreateServiceTemplateVersion
forall x.
CreateServiceTemplateVersion -> Rep CreateServiceTemplateVersion x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreateServiceTemplateVersion x -> CreateServiceTemplateVersion
$cfrom :: forall x.
CreateServiceTemplateVersion -> Rep CreateServiceTemplateVersion x
Prelude.Generic)

-- |
-- Create a value of 'CreateServiceTemplateVersion' 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:
--
-- 'clientToken', 'createServiceTemplateVersion_clientToken' - When included, if two identical requests are made with the same client
-- token, Proton returns the service template version that the first
-- request created.
--
-- 'description', 'createServiceTemplateVersion_description' - A description of the new version of a service template.
--
-- 'majorVersion', 'createServiceTemplateVersion_majorVersion' - To create a new minor version of the service template, include a
-- @major Version@.
--
-- To create a new major and minor version of the service template,
-- /exclude/ @major Version@.
--
-- 'supportedComponentSources', 'createServiceTemplateVersion_supportedComponentSources' - An array of supported component sources. Components with supported
-- sources can be attached to service instances based on this service
-- template version.
--
-- For more information about components, see
-- <https://docs.aws.amazon.com/proton/latest/userguide/ag-components.html Proton components>
-- in the /Proton User Guide/.
--
-- 'tags', 'createServiceTemplateVersion_tags' - An optional list of metadata items that you can associate with the
-- Proton service template version. 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/.
--
-- 'compatibleEnvironmentTemplates', 'createServiceTemplateVersion_compatibleEnvironmentTemplates' - An array of environment template objects that are compatible with the
-- new service template version. A service instance based on this service
-- template version can run in environments based on compatible templates.
--
-- 'source', 'createServiceTemplateVersion_source' - An object that includes the template bundle S3 bucket path and name for
-- the new version of a service template.
--
-- 'templateName', 'createServiceTemplateVersion_templateName' - The name of the service template.
newCreateServiceTemplateVersion ::
  -- | 'compatibleEnvironmentTemplates'
  Prelude.NonEmpty CompatibleEnvironmentTemplateInput ->
  -- | 'source'
  TemplateVersionSourceInput ->
  -- | 'templateName'
  Prelude.Text ->
  CreateServiceTemplateVersion
newCreateServiceTemplateVersion :: NonEmpty CompatibleEnvironmentTemplateInput
-> TemplateVersionSourceInput
-> Text
-> CreateServiceTemplateVersion
newCreateServiceTemplateVersion
  NonEmpty CompatibleEnvironmentTemplateInput
pCompatibleEnvironmentTemplates_
  TemplateVersionSourceInput
pSource_
  Text
pTemplateName_ =
    CreateServiceTemplateVersion'
      { $sel:clientToken:CreateServiceTemplateVersion' :: Maybe Text
clientToken =
          forall a. Maybe a
Prelude.Nothing,
        $sel:description:CreateServiceTemplateVersion' :: Maybe (Sensitive Text)
description = forall a. Maybe a
Prelude.Nothing,
        $sel:majorVersion:CreateServiceTemplateVersion' :: Maybe Text
majorVersion = forall a. Maybe a
Prelude.Nothing,
        $sel:supportedComponentSources:CreateServiceTemplateVersion' :: Maybe [ServiceTemplateSupportedComponentSourceType]
supportedComponentSources = forall a. Maybe a
Prelude.Nothing,
        $sel:tags:CreateServiceTemplateVersion' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing,
        $sel:compatibleEnvironmentTemplates:CreateServiceTemplateVersion' :: NonEmpty CompatibleEnvironmentTemplateInput
compatibleEnvironmentTemplates =
          forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced
            forall t b. AReview t b -> b -> t
Lens.# NonEmpty CompatibleEnvironmentTemplateInput
pCompatibleEnvironmentTemplates_,
        $sel:source:CreateServiceTemplateVersion' :: TemplateVersionSourceInput
source = TemplateVersionSourceInput
pSource_,
        $sel:templateName:CreateServiceTemplateVersion' :: Text
templateName = Text
pTemplateName_
      }

-- | When included, if two identical requests are made with the same client
-- token, Proton returns the service template version that the first
-- request created.
createServiceTemplateVersion_clientToken :: Lens.Lens' CreateServiceTemplateVersion (Prelude.Maybe Prelude.Text)
createServiceTemplateVersion_clientToken :: Lens' CreateServiceTemplateVersion (Maybe Text)
createServiceTemplateVersion_clientToken = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateServiceTemplateVersion' {Maybe Text
clientToken :: Maybe Text
$sel:clientToken:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion -> Maybe Text
clientToken} -> Maybe Text
clientToken) (\s :: CreateServiceTemplateVersion
s@CreateServiceTemplateVersion' {} Maybe Text
a -> CreateServiceTemplateVersion
s {$sel:clientToken:CreateServiceTemplateVersion' :: Maybe Text
clientToken = Maybe Text
a} :: CreateServiceTemplateVersion)

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

-- | To create a new minor version of the service template, include a
-- @major Version@.
--
-- To create a new major and minor version of the service template,
-- /exclude/ @major Version@.
createServiceTemplateVersion_majorVersion :: Lens.Lens' CreateServiceTemplateVersion (Prelude.Maybe Prelude.Text)
createServiceTemplateVersion_majorVersion :: Lens' CreateServiceTemplateVersion (Maybe Text)
createServiceTemplateVersion_majorVersion = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateServiceTemplateVersion' {Maybe Text
majorVersion :: Maybe Text
$sel:majorVersion:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion -> Maybe Text
majorVersion} -> Maybe Text
majorVersion) (\s :: CreateServiceTemplateVersion
s@CreateServiceTemplateVersion' {} Maybe Text
a -> CreateServiceTemplateVersion
s {$sel:majorVersion:CreateServiceTemplateVersion' :: Maybe Text
majorVersion = Maybe Text
a} :: CreateServiceTemplateVersion)

-- | An array of supported component sources. Components with supported
-- sources can be attached to service instances based on this service
-- template version.
--
-- For more information about components, see
-- <https://docs.aws.amazon.com/proton/latest/userguide/ag-components.html Proton components>
-- in the /Proton User Guide/.
createServiceTemplateVersion_supportedComponentSources :: Lens.Lens' CreateServiceTemplateVersion (Prelude.Maybe [ServiceTemplateSupportedComponentSourceType])
createServiceTemplateVersion_supportedComponentSources :: Lens'
  CreateServiceTemplateVersion
  (Maybe [ServiceTemplateSupportedComponentSourceType])
createServiceTemplateVersion_supportedComponentSources = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateServiceTemplateVersion' {Maybe [ServiceTemplateSupportedComponentSourceType]
supportedComponentSources :: Maybe [ServiceTemplateSupportedComponentSourceType]
$sel:supportedComponentSources:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion
-> Maybe [ServiceTemplateSupportedComponentSourceType]
supportedComponentSources} -> Maybe [ServiceTemplateSupportedComponentSourceType]
supportedComponentSources) (\s :: CreateServiceTemplateVersion
s@CreateServiceTemplateVersion' {} Maybe [ServiceTemplateSupportedComponentSourceType]
a -> CreateServiceTemplateVersion
s {$sel:supportedComponentSources:CreateServiceTemplateVersion' :: Maybe [ServiceTemplateSupportedComponentSourceType]
supportedComponentSources = Maybe [ServiceTemplateSupportedComponentSourceType]
a} :: CreateServiceTemplateVersion) 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

-- | An optional list of metadata items that you can associate with the
-- Proton service template version. 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/.
createServiceTemplateVersion_tags :: Lens.Lens' CreateServiceTemplateVersion (Prelude.Maybe [Tag])
createServiceTemplateVersion_tags :: Lens' CreateServiceTemplateVersion (Maybe [Tag])
createServiceTemplateVersion_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateServiceTemplateVersion' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: CreateServiceTemplateVersion
s@CreateServiceTemplateVersion' {} Maybe [Tag]
a -> CreateServiceTemplateVersion
s {$sel:tags:CreateServiceTemplateVersion' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: CreateServiceTemplateVersion) 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

-- | An array of environment template objects that are compatible with the
-- new service template version. A service instance based on this service
-- template version can run in environments based on compatible templates.
createServiceTemplateVersion_compatibleEnvironmentTemplates :: Lens.Lens' CreateServiceTemplateVersion (Prelude.NonEmpty CompatibleEnvironmentTemplateInput)
createServiceTemplateVersion_compatibleEnvironmentTemplates :: Lens'
  CreateServiceTemplateVersion
  (NonEmpty CompatibleEnvironmentTemplateInput)
createServiceTemplateVersion_compatibleEnvironmentTemplates = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateServiceTemplateVersion' {NonEmpty CompatibleEnvironmentTemplateInput
compatibleEnvironmentTemplates :: NonEmpty CompatibleEnvironmentTemplateInput
$sel:compatibleEnvironmentTemplates:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion
-> NonEmpty CompatibleEnvironmentTemplateInput
compatibleEnvironmentTemplates} -> NonEmpty CompatibleEnvironmentTemplateInput
compatibleEnvironmentTemplates) (\s :: CreateServiceTemplateVersion
s@CreateServiceTemplateVersion' {} NonEmpty CompatibleEnvironmentTemplateInput
a -> CreateServiceTemplateVersion
s {$sel:compatibleEnvironmentTemplates:CreateServiceTemplateVersion' :: NonEmpty CompatibleEnvironmentTemplateInput
compatibleEnvironmentTemplates = NonEmpty CompatibleEnvironmentTemplateInput
a} :: CreateServiceTemplateVersion) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | An object that includes the template bundle S3 bucket path and name for
-- the new version of a service template.
createServiceTemplateVersion_source :: Lens.Lens' CreateServiceTemplateVersion TemplateVersionSourceInput
createServiceTemplateVersion_source :: Lens' CreateServiceTemplateVersion TemplateVersionSourceInput
createServiceTemplateVersion_source = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateServiceTemplateVersion' {TemplateVersionSourceInput
source :: TemplateVersionSourceInput
$sel:source:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion -> TemplateVersionSourceInput
source} -> TemplateVersionSourceInput
source) (\s :: CreateServiceTemplateVersion
s@CreateServiceTemplateVersion' {} TemplateVersionSourceInput
a -> CreateServiceTemplateVersion
s {$sel:source:CreateServiceTemplateVersion' :: TemplateVersionSourceInput
source = TemplateVersionSourceInput
a} :: CreateServiceTemplateVersion)

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

instance Core.AWSRequest CreateServiceTemplateVersion where
  type
    AWSResponse CreateServiceTemplateVersion =
      CreateServiceTemplateVersionResponse
  request :: (Service -> Service)
-> CreateServiceTemplateVersion
-> Request CreateServiceTemplateVersion
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 CreateServiceTemplateVersion
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse CreateServiceTemplateVersion)))
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
-> ServiceTemplateVersion -> CreateServiceTemplateVersionResponse
CreateServiceTemplateVersionResponse'
            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
"serviceTemplateVersion")
      )

instance
  Prelude.Hashable
    CreateServiceTemplateVersion
  where
  hashWithSalt :: Int -> CreateServiceTemplateVersion -> Int
hashWithSalt Int
_salt CreateServiceTemplateVersion' {Maybe [ServiceTemplateSupportedComponentSourceType]
Maybe [Tag]
Maybe Text
Maybe (Sensitive Text)
NonEmpty CompatibleEnvironmentTemplateInput
Text
TemplateVersionSourceInput
templateName :: Text
source :: TemplateVersionSourceInput
compatibleEnvironmentTemplates :: NonEmpty CompatibleEnvironmentTemplateInput
tags :: Maybe [Tag]
supportedComponentSources :: Maybe [ServiceTemplateSupportedComponentSourceType]
majorVersion :: Maybe Text
description :: Maybe (Sensitive Text)
clientToken :: Maybe Text
$sel:templateName:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion -> Text
$sel:source:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion -> TemplateVersionSourceInput
$sel:compatibleEnvironmentTemplates:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion
-> NonEmpty CompatibleEnvironmentTemplateInput
$sel:tags:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion -> Maybe [Tag]
$sel:supportedComponentSources:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion
-> Maybe [ServiceTemplateSupportedComponentSourceType]
$sel:majorVersion:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion -> Maybe Text
$sel:description:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion -> Maybe (Sensitive Text)
$sel:clientToken:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
clientToken
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (Sensitive Text)
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
majorVersion
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [ServiceTemplateSupportedComponentSourceType]
supportedComponentSources
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` NonEmpty CompatibleEnvironmentTemplateInput
compatibleEnvironmentTemplates
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` TemplateVersionSourceInput
source
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
templateName

instance Prelude.NFData CreateServiceTemplateVersion where
  rnf :: CreateServiceTemplateVersion -> ()
rnf CreateServiceTemplateVersion' {Maybe [ServiceTemplateSupportedComponentSourceType]
Maybe [Tag]
Maybe Text
Maybe (Sensitive Text)
NonEmpty CompatibleEnvironmentTemplateInput
Text
TemplateVersionSourceInput
templateName :: Text
source :: TemplateVersionSourceInput
compatibleEnvironmentTemplates :: NonEmpty CompatibleEnvironmentTemplateInput
tags :: Maybe [Tag]
supportedComponentSources :: Maybe [ServiceTemplateSupportedComponentSourceType]
majorVersion :: Maybe Text
description :: Maybe (Sensitive Text)
clientToken :: Maybe Text
$sel:templateName:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion -> Text
$sel:source:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion -> TemplateVersionSourceInput
$sel:compatibleEnvironmentTemplates:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion
-> NonEmpty CompatibleEnvironmentTemplateInput
$sel:tags:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion -> Maybe [Tag]
$sel:supportedComponentSources:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion
-> Maybe [ServiceTemplateSupportedComponentSourceType]
$sel:majorVersion:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion -> Maybe Text
$sel:description:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion -> Maybe (Sensitive Text)
$sel:clientToken:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
clientToken
      seq :: forall a b. a -> b -> b
`Prelude.seq` 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 Text
majorVersion
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [ServiceTemplateSupportedComponentSourceType]
supportedComponentSources
      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 NonEmpty CompatibleEnvironmentTemplateInput
compatibleEnvironmentTemplates
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf TemplateVersionSourceInput
source
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
templateName

instance Data.ToHeaders CreateServiceTemplateVersion where
  toHeaders :: CreateServiceTemplateVersion -> 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.CreateServiceTemplateVersion" ::
                          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 CreateServiceTemplateVersion where
  toJSON :: CreateServiceTemplateVersion -> Value
toJSON CreateServiceTemplateVersion' {Maybe [ServiceTemplateSupportedComponentSourceType]
Maybe [Tag]
Maybe Text
Maybe (Sensitive Text)
NonEmpty CompatibleEnvironmentTemplateInput
Text
TemplateVersionSourceInput
templateName :: Text
source :: TemplateVersionSourceInput
compatibleEnvironmentTemplates :: NonEmpty CompatibleEnvironmentTemplateInput
tags :: Maybe [Tag]
supportedComponentSources :: Maybe [ServiceTemplateSupportedComponentSourceType]
majorVersion :: Maybe Text
description :: Maybe (Sensitive Text)
clientToken :: Maybe Text
$sel:templateName:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion -> Text
$sel:source:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion -> TemplateVersionSourceInput
$sel:compatibleEnvironmentTemplates:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion
-> NonEmpty CompatibleEnvironmentTemplateInput
$sel:tags:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion -> Maybe [Tag]
$sel:supportedComponentSources:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion
-> Maybe [ServiceTemplateSupportedComponentSourceType]
$sel:majorVersion:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion -> Maybe Text
$sel:description:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion -> Maybe (Sensitive Text)
$sel:clientToken:CreateServiceTemplateVersion' :: CreateServiceTemplateVersion -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"clientToken" 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
clientToken,
            (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
"majorVersion" 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
majorVersion,
            (Key
"supportedComponentSources" 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 [ServiceTemplateSupportedComponentSourceType]
supportedComponentSources,
            (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
"compatibleEnvironmentTemplates"
                  forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= NonEmpty CompatibleEnvironmentTemplateInput
compatibleEnvironmentTemplates
              ),
            forall a. a -> Maybe a
Prelude.Just (Key
"source" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= TemplateVersionSourceInput
source),
            forall a. a -> Maybe a
Prelude.Just (Key
"templateName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
templateName)
          ]
      )

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

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

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

-- |
-- Create a value of 'CreateServiceTemplateVersionResponse' 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', 'createServiceTemplateVersionResponse_httpStatus' - The response's http status code.
--
-- 'serviceTemplateVersion', 'createServiceTemplateVersionResponse_serviceTemplateVersion' - The service template version summary of detail data that\'s returned by
-- Proton.
newCreateServiceTemplateVersionResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'serviceTemplateVersion'
  ServiceTemplateVersion ->
  CreateServiceTemplateVersionResponse
newCreateServiceTemplateVersionResponse :: Int
-> ServiceTemplateVersion -> CreateServiceTemplateVersionResponse
newCreateServiceTemplateVersionResponse
  Int
pHttpStatus_
  ServiceTemplateVersion
pServiceTemplateVersion_ =
    CreateServiceTemplateVersionResponse'
      { $sel:httpStatus:CreateServiceTemplateVersionResponse' :: Int
httpStatus =
          Int
pHttpStatus_,
        $sel:serviceTemplateVersion:CreateServiceTemplateVersionResponse' :: ServiceTemplateVersion
serviceTemplateVersion =
          ServiceTemplateVersion
pServiceTemplateVersion_
      }

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

-- | The service template version summary of detail data that\'s returned by
-- Proton.
createServiceTemplateVersionResponse_serviceTemplateVersion :: Lens.Lens' CreateServiceTemplateVersionResponse ServiceTemplateVersion
createServiceTemplateVersionResponse_serviceTemplateVersion :: Lens' CreateServiceTemplateVersionResponse ServiceTemplateVersion
createServiceTemplateVersionResponse_serviceTemplateVersion = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateServiceTemplateVersionResponse' {ServiceTemplateVersion
serviceTemplateVersion :: ServiceTemplateVersion
$sel:serviceTemplateVersion:CreateServiceTemplateVersionResponse' :: CreateServiceTemplateVersionResponse -> ServiceTemplateVersion
serviceTemplateVersion} -> ServiceTemplateVersion
serviceTemplateVersion) (\s :: CreateServiceTemplateVersionResponse
s@CreateServiceTemplateVersionResponse' {} ServiceTemplateVersion
a -> CreateServiceTemplateVersionResponse
s {$sel:serviceTemplateVersion:CreateServiceTemplateVersionResponse' :: ServiceTemplateVersion
serviceTemplateVersion = ServiceTemplateVersion
a} :: CreateServiceTemplateVersionResponse)

instance
  Prelude.NFData
    CreateServiceTemplateVersionResponse
  where
  rnf :: CreateServiceTemplateVersionResponse -> ()
rnf CreateServiceTemplateVersionResponse' {Int
ServiceTemplateVersion
serviceTemplateVersion :: ServiceTemplateVersion
httpStatus :: Int
$sel:serviceTemplateVersion:CreateServiceTemplateVersionResponse' :: CreateServiceTemplateVersionResponse -> ServiceTemplateVersion
$sel:httpStatus:CreateServiceTemplateVersionResponse' :: CreateServiceTemplateVersionResponse -> 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 ServiceTemplateVersion
serviceTemplateVersion