packages feed

amazonka-proton-2.0: gen/Amazonka/Proton/CreateTemplateSyncConfig.hs

{-# 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.CreateTemplateSyncConfig
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Set up a template to create new template versions automatically by
-- tracking a linked repository. A linked repository is a repository that
-- has been registered with Proton. For more information, see
-- CreateRepository.
--
-- When a commit is pushed to your linked repository, Proton checks for
-- changes to your repository template bundles. If it detects a template
-- bundle change, a new major or minor version of its template is created,
-- if the version doesn’t already exist. For more information, see
-- <https://docs.aws.amazon.com/proton/latest/userguide/ag-template-sync-configs.html Template sync configurations>
-- in the /Proton User Guide/.
module Amazonka.Proton.CreateTemplateSyncConfig
  ( -- * Creating a Request
    CreateTemplateSyncConfig (..),
    newCreateTemplateSyncConfig,

    -- * Request Lenses
    createTemplateSyncConfig_subdirectory,
    createTemplateSyncConfig_branch,
    createTemplateSyncConfig_repositoryName,
    createTemplateSyncConfig_repositoryProvider,
    createTemplateSyncConfig_templateName,
    createTemplateSyncConfig_templateType,

    -- * Destructuring the Response
    CreateTemplateSyncConfigResponse (..),
    newCreateTemplateSyncConfigResponse,

    -- * Response Lenses
    createTemplateSyncConfigResponse_templateSyncConfig,
    createTemplateSyncConfigResponse_httpStatus,
  )
where

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

-- | /See:/ 'newCreateTemplateSyncConfig' smart constructor.
data CreateTemplateSyncConfig = CreateTemplateSyncConfig'
  { -- | A repository subdirectory path to your template bundle directory. When
    -- included, Proton limits the template bundle search to this repository
    -- directory.
    subdirectory :: Prelude.Maybe Prelude.Text,
    -- | The repository branch for your template.
    branch :: Prelude.Text,
    -- | The repository name (for example, @myrepos\/myrepo@).
    repositoryName :: Prelude.Text,
    -- | The provider type for your repository.
    repositoryProvider :: RepositoryProvider,
    -- | The name of your registered template.
    templateName :: Prelude.Text,
    -- | The type of the registered template.
    templateType :: TemplateType
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'CreateTemplateSyncConfig' 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:
--
-- 'subdirectory', 'createTemplateSyncConfig_subdirectory' - A repository subdirectory path to your template bundle directory. When
-- included, Proton limits the template bundle search to this repository
-- directory.
--
-- 'branch', 'createTemplateSyncConfig_branch' - The repository branch for your template.
--
-- 'repositoryName', 'createTemplateSyncConfig_repositoryName' - The repository name (for example, @myrepos\/myrepo@).
--
-- 'repositoryProvider', 'createTemplateSyncConfig_repositoryProvider' - The provider type for your repository.
--
-- 'templateName', 'createTemplateSyncConfig_templateName' - The name of your registered template.
--
-- 'templateType', 'createTemplateSyncConfig_templateType' - The type of the registered template.
newCreateTemplateSyncConfig ::
  -- | 'branch'
  Prelude.Text ->
  -- | 'repositoryName'
  Prelude.Text ->
  -- | 'repositoryProvider'
  RepositoryProvider ->
  -- | 'templateName'
  Prelude.Text ->
  -- | 'templateType'
  TemplateType ->
  CreateTemplateSyncConfig
newCreateTemplateSyncConfig
  pBranch_
  pRepositoryName_
  pRepositoryProvider_
  pTemplateName_
  pTemplateType_ =
    CreateTemplateSyncConfig'
      { subdirectory =
          Prelude.Nothing,
        branch = pBranch_,
        repositoryName = pRepositoryName_,
        repositoryProvider = pRepositoryProvider_,
        templateName = pTemplateName_,
        templateType = pTemplateType_
      }

-- | A repository subdirectory path to your template bundle directory. When
-- included, Proton limits the template bundle search to this repository
-- directory.
createTemplateSyncConfig_subdirectory :: Lens.Lens' CreateTemplateSyncConfig (Prelude.Maybe Prelude.Text)
createTemplateSyncConfig_subdirectory = Lens.lens (\CreateTemplateSyncConfig' {subdirectory} -> subdirectory) (\s@CreateTemplateSyncConfig' {} a -> s {subdirectory = a} :: CreateTemplateSyncConfig)

-- | The repository branch for your template.
createTemplateSyncConfig_branch :: Lens.Lens' CreateTemplateSyncConfig Prelude.Text
createTemplateSyncConfig_branch = Lens.lens (\CreateTemplateSyncConfig' {branch} -> branch) (\s@CreateTemplateSyncConfig' {} a -> s {branch = a} :: CreateTemplateSyncConfig)

-- | The repository name (for example, @myrepos\/myrepo@).
createTemplateSyncConfig_repositoryName :: Lens.Lens' CreateTemplateSyncConfig Prelude.Text
createTemplateSyncConfig_repositoryName = Lens.lens (\CreateTemplateSyncConfig' {repositoryName} -> repositoryName) (\s@CreateTemplateSyncConfig' {} a -> s {repositoryName = a} :: CreateTemplateSyncConfig)

-- | The provider type for your repository.
createTemplateSyncConfig_repositoryProvider :: Lens.Lens' CreateTemplateSyncConfig RepositoryProvider
createTemplateSyncConfig_repositoryProvider = Lens.lens (\CreateTemplateSyncConfig' {repositoryProvider} -> repositoryProvider) (\s@CreateTemplateSyncConfig' {} a -> s {repositoryProvider = a} :: CreateTemplateSyncConfig)

-- | The name of your registered template.
createTemplateSyncConfig_templateName :: Lens.Lens' CreateTemplateSyncConfig Prelude.Text
createTemplateSyncConfig_templateName = Lens.lens (\CreateTemplateSyncConfig' {templateName} -> templateName) (\s@CreateTemplateSyncConfig' {} a -> s {templateName = a} :: CreateTemplateSyncConfig)

-- | The type of the registered template.
createTemplateSyncConfig_templateType :: Lens.Lens' CreateTemplateSyncConfig TemplateType
createTemplateSyncConfig_templateType = Lens.lens (\CreateTemplateSyncConfig' {templateType} -> templateType) (\s@CreateTemplateSyncConfig' {} a -> s {templateType = a} :: CreateTemplateSyncConfig)

instance Core.AWSRequest CreateTemplateSyncConfig where
  type
    AWSResponse CreateTemplateSyncConfig =
      CreateTemplateSyncConfigResponse
  request overrides =
    Request.postJSON (overrides defaultService)
  response =
    Response.receiveJSON
      ( \s h x ->
          CreateTemplateSyncConfigResponse'
            Prelude.<$> (x Data..?> "templateSyncConfig")
            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
      )

instance Prelude.Hashable CreateTemplateSyncConfig where
  hashWithSalt _salt CreateTemplateSyncConfig' {..} =
    _salt
      `Prelude.hashWithSalt` subdirectory
      `Prelude.hashWithSalt` branch
      `Prelude.hashWithSalt` repositoryName
      `Prelude.hashWithSalt` repositoryProvider
      `Prelude.hashWithSalt` templateName
      `Prelude.hashWithSalt` templateType

instance Prelude.NFData CreateTemplateSyncConfig where
  rnf CreateTemplateSyncConfig' {..} =
    Prelude.rnf subdirectory
      `Prelude.seq` Prelude.rnf branch
      `Prelude.seq` Prelude.rnf repositoryName
      `Prelude.seq` Prelude.rnf repositoryProvider
      `Prelude.seq` Prelude.rnf templateName
      `Prelude.seq` Prelude.rnf templateType

instance Data.ToHeaders CreateTemplateSyncConfig where
  toHeaders =
    Prelude.const
      ( Prelude.mconcat
          [ "X-Amz-Target"
              Data.=# ( "AwsProton20200720.CreateTemplateSyncConfig" ::
                          Prelude.ByteString
                      ),
            "Content-Type"
              Data.=# ( "application/x-amz-json-1.0" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON CreateTemplateSyncConfig where
  toJSON CreateTemplateSyncConfig' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("subdirectory" Data..=) Prelude.<$> subdirectory,
            Prelude.Just ("branch" Data..= branch),
            Prelude.Just
              ("repositoryName" Data..= repositoryName),
            Prelude.Just
              ("repositoryProvider" Data..= repositoryProvider),
            Prelude.Just ("templateName" Data..= templateName),
            Prelude.Just ("templateType" Data..= templateType)
          ]
      )

instance Data.ToPath CreateTemplateSyncConfig where
  toPath = Prelude.const "/"

instance Data.ToQuery CreateTemplateSyncConfig where
  toQuery = Prelude.const Prelude.mempty

-- | /See:/ 'newCreateTemplateSyncConfigResponse' smart constructor.
data CreateTemplateSyncConfigResponse = CreateTemplateSyncConfigResponse'
  { -- | The template sync configuration detail data that\'s returned by Proton.
    templateSyncConfig :: Prelude.Maybe TemplateSyncConfig,
    -- | The response's http status code.
    httpStatus :: Prelude.Int
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'CreateTemplateSyncConfigResponse' 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:
--
-- 'templateSyncConfig', 'createTemplateSyncConfigResponse_templateSyncConfig' - The template sync configuration detail data that\'s returned by Proton.
--
-- 'httpStatus', 'createTemplateSyncConfigResponse_httpStatus' - The response's http status code.
newCreateTemplateSyncConfigResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateTemplateSyncConfigResponse
newCreateTemplateSyncConfigResponse pHttpStatus_ =
  CreateTemplateSyncConfigResponse'
    { templateSyncConfig =
        Prelude.Nothing,
      httpStatus = pHttpStatus_
    }

-- | The template sync configuration detail data that\'s returned by Proton.
createTemplateSyncConfigResponse_templateSyncConfig :: Lens.Lens' CreateTemplateSyncConfigResponse (Prelude.Maybe TemplateSyncConfig)
createTemplateSyncConfigResponse_templateSyncConfig = Lens.lens (\CreateTemplateSyncConfigResponse' {templateSyncConfig} -> templateSyncConfig) (\s@CreateTemplateSyncConfigResponse' {} a -> s {templateSyncConfig = a} :: CreateTemplateSyncConfigResponse)

-- | The response's http status code.
createTemplateSyncConfigResponse_httpStatus :: Lens.Lens' CreateTemplateSyncConfigResponse Prelude.Int
createTemplateSyncConfigResponse_httpStatus = Lens.lens (\CreateTemplateSyncConfigResponse' {httpStatus} -> httpStatus) (\s@CreateTemplateSyncConfigResponse' {} a -> s {httpStatus = a} :: CreateTemplateSyncConfigResponse)

instance
  Prelude.NFData
    CreateTemplateSyncConfigResponse
  where
  rnf CreateTemplateSyncConfigResponse' {..} =
    Prelude.rnf templateSyncConfig
      `Prelude.seq` Prelude.rnf httpStatus