packages feed

amazonka-ssm-contacts-2.0: gen/Amazonka/SSMContacts/StartEngagement.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.SSMContacts.StartEngagement
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Starts an engagement to a contact or escalation plan. The engagement
-- engages each contact specified in the incident.
module Amazonka.SSMContacts.StartEngagement
  ( -- * Creating a Request
    StartEngagement (..),
    newStartEngagement,

    -- * Request Lenses
    startEngagement_idempotencyToken,
    startEngagement_incidentId,
    startEngagement_publicContent,
    startEngagement_publicSubject,
    startEngagement_contactId,
    startEngagement_sender,
    startEngagement_subject,
    startEngagement_content,

    -- * Destructuring the Response
    StartEngagementResponse (..),
    newStartEngagementResponse,

    -- * Response Lenses
    startEngagementResponse_httpStatus,
    startEngagementResponse_engagementArn,
  )
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.SSMContacts.Types

-- | /See:/ 'newStartEngagement' smart constructor.
data StartEngagement = StartEngagement'
  { -- | A token ensuring that the operation is called only once with the
    -- specified details.
    idempotencyToken :: Prelude.Maybe Prelude.Text,
    -- | The ARN of the incident that the engagement is part of.
    incidentId :: Prelude.Maybe Prelude.Text,
    -- | The insecure content of the message that was sent to the contact. Use
    -- this field for engagements to @SMS@.
    publicContent :: Prelude.Maybe Prelude.Text,
    -- | The insecure subject of the message that was sent to the contact. Use
    -- this field for engagements to @SMS@.
    publicSubject :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Resource Name (ARN) of the contact being engaged.
    contactId :: Prelude.Text,
    -- | The user that started the engagement.
    sender :: Prelude.Text,
    -- | The secure subject of the message that was sent to the contact. Use this
    -- field for engagements to @VOICE@ or @EMAIL@.
    subject :: Prelude.Text,
    -- | The secure content of the message that was sent to the contact. Use this
    -- field for engagements to @VOICE@ or @EMAIL@.
    content :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'StartEngagement' 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:
--
-- 'idempotencyToken', 'startEngagement_idempotencyToken' - A token ensuring that the operation is called only once with the
-- specified details.
--
-- 'incidentId', 'startEngagement_incidentId' - The ARN of the incident that the engagement is part of.
--
-- 'publicContent', 'startEngagement_publicContent' - The insecure content of the message that was sent to the contact. Use
-- this field for engagements to @SMS@.
--
-- 'publicSubject', 'startEngagement_publicSubject' - The insecure subject of the message that was sent to the contact. Use
-- this field for engagements to @SMS@.
--
-- 'contactId', 'startEngagement_contactId' - The Amazon Resource Name (ARN) of the contact being engaged.
--
-- 'sender', 'startEngagement_sender' - The user that started the engagement.
--
-- 'subject', 'startEngagement_subject' - The secure subject of the message that was sent to the contact. Use this
-- field for engagements to @VOICE@ or @EMAIL@.
--
-- 'content', 'startEngagement_content' - The secure content of the message that was sent to the contact. Use this
-- field for engagements to @VOICE@ or @EMAIL@.
newStartEngagement ::
  -- | 'contactId'
  Prelude.Text ->
  -- | 'sender'
  Prelude.Text ->
  -- | 'subject'
  Prelude.Text ->
  -- | 'content'
  Prelude.Text ->
  StartEngagement
newStartEngagement
  pContactId_
  pSender_
  pSubject_
  pContent_ =
    StartEngagement'
      { idempotencyToken =
          Prelude.Nothing,
        incidentId = Prelude.Nothing,
        publicContent = Prelude.Nothing,
        publicSubject = Prelude.Nothing,
        contactId = pContactId_,
        sender = pSender_,
        subject = pSubject_,
        content = pContent_
      }

-- | A token ensuring that the operation is called only once with the
-- specified details.
startEngagement_idempotencyToken :: Lens.Lens' StartEngagement (Prelude.Maybe Prelude.Text)
startEngagement_idempotencyToken = Lens.lens (\StartEngagement' {idempotencyToken} -> idempotencyToken) (\s@StartEngagement' {} a -> s {idempotencyToken = a} :: StartEngagement)

-- | The ARN of the incident that the engagement is part of.
startEngagement_incidentId :: Lens.Lens' StartEngagement (Prelude.Maybe Prelude.Text)
startEngagement_incidentId = Lens.lens (\StartEngagement' {incidentId} -> incidentId) (\s@StartEngagement' {} a -> s {incidentId = a} :: StartEngagement)

-- | The insecure content of the message that was sent to the contact. Use
-- this field for engagements to @SMS@.
startEngagement_publicContent :: Lens.Lens' StartEngagement (Prelude.Maybe Prelude.Text)
startEngagement_publicContent = Lens.lens (\StartEngagement' {publicContent} -> publicContent) (\s@StartEngagement' {} a -> s {publicContent = a} :: StartEngagement)

-- | The insecure subject of the message that was sent to the contact. Use
-- this field for engagements to @SMS@.
startEngagement_publicSubject :: Lens.Lens' StartEngagement (Prelude.Maybe Prelude.Text)
startEngagement_publicSubject = Lens.lens (\StartEngagement' {publicSubject} -> publicSubject) (\s@StartEngagement' {} a -> s {publicSubject = a} :: StartEngagement)

-- | The Amazon Resource Name (ARN) of the contact being engaged.
startEngagement_contactId :: Lens.Lens' StartEngagement Prelude.Text
startEngagement_contactId = Lens.lens (\StartEngagement' {contactId} -> contactId) (\s@StartEngagement' {} a -> s {contactId = a} :: StartEngagement)

-- | The user that started the engagement.
startEngagement_sender :: Lens.Lens' StartEngagement Prelude.Text
startEngagement_sender = Lens.lens (\StartEngagement' {sender} -> sender) (\s@StartEngagement' {} a -> s {sender = a} :: StartEngagement)

-- | The secure subject of the message that was sent to the contact. Use this
-- field for engagements to @VOICE@ or @EMAIL@.
startEngagement_subject :: Lens.Lens' StartEngagement Prelude.Text
startEngagement_subject = Lens.lens (\StartEngagement' {subject} -> subject) (\s@StartEngagement' {} a -> s {subject = a} :: StartEngagement)

-- | The secure content of the message that was sent to the contact. Use this
-- field for engagements to @VOICE@ or @EMAIL@.
startEngagement_content :: Lens.Lens' StartEngagement Prelude.Text
startEngagement_content = Lens.lens (\StartEngagement' {content} -> content) (\s@StartEngagement' {} a -> s {content = a} :: StartEngagement)

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

instance Prelude.Hashable StartEngagement where
  hashWithSalt _salt StartEngagement' {..} =
    _salt
      `Prelude.hashWithSalt` idempotencyToken
      `Prelude.hashWithSalt` incidentId
      `Prelude.hashWithSalt` publicContent
      `Prelude.hashWithSalt` publicSubject
      `Prelude.hashWithSalt` contactId
      `Prelude.hashWithSalt` sender
      `Prelude.hashWithSalt` subject
      `Prelude.hashWithSalt` content

instance Prelude.NFData StartEngagement where
  rnf StartEngagement' {..} =
    Prelude.rnf idempotencyToken
      `Prelude.seq` Prelude.rnf incidentId
      `Prelude.seq` Prelude.rnf publicContent
      `Prelude.seq` Prelude.rnf publicSubject
      `Prelude.seq` Prelude.rnf contactId
      `Prelude.seq` Prelude.rnf sender
      `Prelude.seq` Prelude.rnf subject
      `Prelude.seq` Prelude.rnf content

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

instance Data.ToJSON StartEngagement where
  toJSON StartEngagement' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("IdempotencyToken" Data..=)
              Prelude.<$> idempotencyToken,
            ("IncidentId" Data..=) Prelude.<$> incidentId,
            ("PublicContent" Data..=) Prelude.<$> publicContent,
            ("PublicSubject" Data..=) Prelude.<$> publicSubject,
            Prelude.Just ("ContactId" Data..= contactId),
            Prelude.Just ("Sender" Data..= sender),
            Prelude.Just ("Subject" Data..= subject),
            Prelude.Just ("Content" Data..= content)
          ]
      )

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

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

-- | /See:/ 'newStartEngagementResponse' smart constructor.
data StartEngagementResponse = StartEngagementResponse'
  { -- | The response's http status code.
    httpStatus :: Prelude.Int,
    -- | The ARN of the engagement.
    engagementArn :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'StartEngagementResponse' 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', 'startEngagementResponse_httpStatus' - The response's http status code.
--
-- 'engagementArn', 'startEngagementResponse_engagementArn' - The ARN of the engagement.
newStartEngagementResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'engagementArn'
  Prelude.Text ->
  StartEngagementResponse
newStartEngagementResponse
  pHttpStatus_
  pEngagementArn_ =
    StartEngagementResponse'
      { httpStatus = pHttpStatus_,
        engagementArn = pEngagementArn_
      }

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

-- | The ARN of the engagement.
startEngagementResponse_engagementArn :: Lens.Lens' StartEngagementResponse Prelude.Text
startEngagementResponse_engagementArn = Lens.lens (\StartEngagementResponse' {engagementArn} -> engagementArn) (\s@StartEngagementResponse' {} a -> s {engagementArn = a} :: StartEngagementResponse)

instance Prelude.NFData StartEngagementResponse where
  rnf StartEngagementResponse' {..} =
    Prelude.rnf httpStatus
      `Prelude.seq` Prelude.rnf engagementArn