packages feed

amazonka-ssm-sap-2.0: gen/Amazonka/SSMSAP/RegisterApplication.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.SSMSAP.RegisterApplication
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Register an SAP application with AWS Systems Manager for SAP. You must
-- meet the following requirements before registering.
--
-- The SAP application you want to register with AWS Systems Manager for
-- SAP is running on Amazon EC2.
--
-- AWS Systems Manager Agent must be setup on an Amazon EC2 instance along
-- with the required IAM permissions.
--
-- Amazon EC2 instance(s) must have access to the secrets created in AWS
-- Secrets Manager to manage SAP applications and components.
module Amazonka.SSMSAP.RegisterApplication
  ( -- * Creating a Request
    RegisterApplication (..),
    newRegisterApplication,

    -- * Request Lenses
    registerApplication_sapInstanceNumber,
    registerApplication_sid,
    registerApplication_tags,
    registerApplication_applicationId,
    registerApplication_applicationType,
    registerApplication_instances,
    registerApplication_credentials,

    -- * Destructuring the Response
    RegisterApplicationResponse (..),
    newRegisterApplicationResponse,

    -- * Response Lenses
    registerApplicationResponse_application,
    registerApplicationResponse_operationId,
    registerApplicationResponse_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 qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response
import Amazonka.SSMSAP.Types

-- | /See:/ 'newRegisterApplication' smart constructor.
data RegisterApplication = RegisterApplication'
  { sapInstanceNumber :: Prelude.Maybe Prelude.Text,
    sid :: Prelude.Maybe Prelude.Text,
    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
    applicationId :: Prelude.Text,
    applicationType :: ApplicationType,
    instances :: Prelude.NonEmpty Prelude.Text,
    credentials :: Prelude.NonEmpty ApplicationCredential
  }
  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'RegisterApplication' 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:
--
-- 'sapInstanceNumber', 'registerApplication_sapInstanceNumber' -
--
-- 'sid', 'registerApplication_sid' -
--
-- 'tags', 'registerApplication_tags' -
--
-- 'applicationId', 'registerApplication_applicationId' -
--
-- 'applicationType', 'registerApplication_applicationType' -
--
-- 'instances', 'registerApplication_instances' -
--
-- 'credentials', 'registerApplication_credentials' -
newRegisterApplication ::
  -- | 'applicationId'
  Prelude.Text ->
  -- | 'applicationType'
  ApplicationType ->
  -- | 'instances'
  Prelude.NonEmpty Prelude.Text ->
  -- | 'credentials'
  Prelude.NonEmpty ApplicationCredential ->
  RegisterApplication
newRegisterApplication
  pApplicationId_
  pApplicationType_
  pInstances_
  pCredentials_ =
    RegisterApplication'
      { sapInstanceNumber =
          Prelude.Nothing,
        sid = Prelude.Nothing,
        tags = Prelude.Nothing,
        applicationId = pApplicationId_,
        applicationType = pApplicationType_,
        instances = Lens.coerced Lens.# pInstances_,
        credentials = Lens.coerced Lens.# pCredentials_
      }

registerApplication_sapInstanceNumber :: Lens.Lens' RegisterApplication (Prelude.Maybe Prelude.Text)
registerApplication_sapInstanceNumber = Lens.lens (\RegisterApplication' {sapInstanceNumber} -> sapInstanceNumber) (\s@RegisterApplication' {} a -> s {sapInstanceNumber = a} :: RegisterApplication)

registerApplication_sid :: Lens.Lens' RegisterApplication (Prelude.Maybe Prelude.Text)
registerApplication_sid = Lens.lens (\RegisterApplication' {sid} -> sid) (\s@RegisterApplication' {} a -> s {sid = a} :: RegisterApplication)

registerApplication_tags :: Lens.Lens' RegisterApplication (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
registerApplication_tags = Lens.lens (\RegisterApplication' {tags} -> tags) (\s@RegisterApplication' {} a -> s {tags = a} :: RegisterApplication) Prelude.. Lens.mapping Lens.coerced

registerApplication_applicationId :: Lens.Lens' RegisterApplication Prelude.Text
registerApplication_applicationId = Lens.lens (\RegisterApplication' {applicationId} -> applicationId) (\s@RegisterApplication' {} a -> s {applicationId = a} :: RegisterApplication)

registerApplication_applicationType :: Lens.Lens' RegisterApplication ApplicationType
registerApplication_applicationType = Lens.lens (\RegisterApplication' {applicationType} -> applicationType) (\s@RegisterApplication' {} a -> s {applicationType = a} :: RegisterApplication)

registerApplication_instances :: Lens.Lens' RegisterApplication (Prelude.NonEmpty Prelude.Text)
registerApplication_instances = Lens.lens (\RegisterApplication' {instances} -> instances) (\s@RegisterApplication' {} a -> s {instances = a} :: RegisterApplication) Prelude.. Lens.coerced

registerApplication_credentials :: Lens.Lens' RegisterApplication (Prelude.NonEmpty ApplicationCredential)
registerApplication_credentials = Lens.lens (\RegisterApplication' {credentials} -> credentials) (\s@RegisterApplication' {} a -> s {credentials = a} :: RegisterApplication) Prelude.. Lens.coerced

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

instance Prelude.Hashable RegisterApplication where
  hashWithSalt _salt RegisterApplication' {..} =
    _salt
      `Prelude.hashWithSalt` sapInstanceNumber
      `Prelude.hashWithSalt` sid
      `Prelude.hashWithSalt` tags
      `Prelude.hashWithSalt` applicationId
      `Prelude.hashWithSalt` applicationType
      `Prelude.hashWithSalt` instances
      `Prelude.hashWithSalt` credentials

instance Prelude.NFData RegisterApplication where
  rnf RegisterApplication' {..} =
    Prelude.rnf sapInstanceNumber
      `Prelude.seq` Prelude.rnf sid
      `Prelude.seq` Prelude.rnf tags
      `Prelude.seq` Prelude.rnf applicationId
      `Prelude.seq` Prelude.rnf applicationType
      `Prelude.seq` Prelude.rnf instances
      `Prelude.seq` Prelude.rnf credentials

instance Data.ToHeaders RegisterApplication where
  toHeaders =
    Prelude.const
      ( Prelude.mconcat
          [ "Content-Type"
              Data.=# ( "application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON RegisterApplication where
  toJSON RegisterApplication' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("SapInstanceNumber" Data..=)
              Prelude.<$> sapInstanceNumber,
            ("Sid" Data..=) Prelude.<$> sid,
            ("Tags" Data..=) Prelude.<$> tags,
            Prelude.Just ("ApplicationId" Data..= applicationId),
            Prelude.Just
              ("ApplicationType" Data..= applicationType),
            Prelude.Just ("Instances" Data..= instances),
            Prelude.Just ("Credentials" Data..= credentials)
          ]
      )

instance Data.ToPath RegisterApplication where
  toPath = Prelude.const "/register-application"

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

-- | /See:/ 'newRegisterApplicationResponse' smart constructor.
data RegisterApplicationResponse = RegisterApplicationResponse'
  { application :: Prelude.Maybe Application,
    operationId :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    httpStatus :: Prelude.Int
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'RegisterApplicationResponse' 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:
--
-- 'application', 'registerApplicationResponse_application' -
--
-- 'operationId', 'registerApplicationResponse_operationId' -
--
-- 'httpStatus', 'registerApplicationResponse_httpStatus' - The response's http status code.
newRegisterApplicationResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  RegisterApplicationResponse
newRegisterApplicationResponse pHttpStatus_ =
  RegisterApplicationResponse'
    { application =
        Prelude.Nothing,
      operationId = Prelude.Nothing,
      httpStatus = pHttpStatus_
    }

registerApplicationResponse_application :: Lens.Lens' RegisterApplicationResponse (Prelude.Maybe Application)
registerApplicationResponse_application = Lens.lens (\RegisterApplicationResponse' {application} -> application) (\s@RegisterApplicationResponse' {} a -> s {application = a} :: RegisterApplicationResponse)

registerApplicationResponse_operationId :: Lens.Lens' RegisterApplicationResponse (Prelude.Maybe Prelude.Text)
registerApplicationResponse_operationId = Lens.lens (\RegisterApplicationResponse' {operationId} -> operationId) (\s@RegisterApplicationResponse' {} a -> s {operationId = a} :: RegisterApplicationResponse)

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

instance Prelude.NFData RegisterApplicationResponse where
  rnf RegisterApplicationResponse' {..} =
    Prelude.rnf application
      `Prelude.seq` Prelude.rnf operationId
      `Prelude.seq` Prelude.rnf httpStatus