packages feed

amazonka-connect-2.0: gen/Amazonka/Connect/CreateRule.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.Connect.CreateRule
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates a rule for the specified Amazon Connect instance.
--
-- Use the
-- <https://docs.aws.amazon.com/connect/latest/APIReference/connect-rules-language.html Rules Function language>
-- to code conditions for the rule.
module Amazonka.Connect.CreateRule
  ( -- * Creating a Request
    CreateRule (..),
    newCreateRule,

    -- * Request Lenses
    createRule_clientToken,
    createRule_instanceId,
    createRule_name,
    createRule_triggerEventSource,
    createRule_function,
    createRule_actions,
    createRule_publishStatus,

    -- * Destructuring the Response
    CreateRuleResponse (..),
    newCreateRuleResponse,

    -- * Response Lenses
    createRuleResponse_httpStatus,
    createRuleResponse_ruleArn,
    createRuleResponse_ruleId,
  )
where

import Amazonka.Connect.Types
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

-- | /See:/ 'newCreateRule' smart constructor.
data CreateRule = CreateRule'
  { -- | A unique, case-sensitive identifier that you provide to ensure the
    -- idempotency of the request. If not provided, the Amazon Web Services SDK
    -- populates this field. For more information about idempotency, see
    -- <https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/ Making retries safe with idempotent APIs>.
    clientToken :: Prelude.Maybe Prelude.Text,
    -- | The identifier of the Amazon Connect instance. You can find the
    -- instanceId in the ARN of the instance.
    instanceId :: Prelude.Text,
    -- | A unique name for the rule.
    name :: Prelude.Text,
    -- | The event source to trigger the rule.
    triggerEventSource :: RuleTriggerEventSource,
    -- | The conditions of the rule.
    function :: Prelude.Text,
    -- | A list of actions to be run when the rule is triggered.
    actions :: [RuleAction],
    -- | The publish status of the rule.
    publishStatus :: RulePublishStatus
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'CreateRule' 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', 'createRule_clientToken' - A unique, case-sensitive identifier that you provide to ensure the
-- idempotency of the request. If not provided, the Amazon Web Services SDK
-- populates this field. For more information about idempotency, see
-- <https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/ Making retries safe with idempotent APIs>.
--
-- 'instanceId', 'createRule_instanceId' - The identifier of the Amazon Connect instance. You can find the
-- instanceId in the ARN of the instance.
--
-- 'name', 'createRule_name' - A unique name for the rule.
--
-- 'triggerEventSource', 'createRule_triggerEventSource' - The event source to trigger the rule.
--
-- 'function', 'createRule_function' - The conditions of the rule.
--
-- 'actions', 'createRule_actions' - A list of actions to be run when the rule is triggered.
--
-- 'publishStatus', 'createRule_publishStatus' - The publish status of the rule.
newCreateRule ::
  -- | 'instanceId'
  Prelude.Text ->
  -- | 'name'
  Prelude.Text ->
  -- | 'triggerEventSource'
  RuleTriggerEventSource ->
  -- | 'function'
  Prelude.Text ->
  -- | 'publishStatus'
  RulePublishStatus ->
  CreateRule
newCreateRule
  pInstanceId_
  pName_
  pTriggerEventSource_
  pFunction_
  pPublishStatus_ =
    CreateRule'
      { clientToken = Prelude.Nothing,
        instanceId = pInstanceId_,
        name = pName_,
        triggerEventSource = pTriggerEventSource_,
        function = pFunction_,
        actions = Prelude.mempty,
        publishStatus = pPublishStatus_
      }

-- | A unique, case-sensitive identifier that you provide to ensure the
-- idempotency of the request. If not provided, the Amazon Web Services SDK
-- populates this field. For more information about idempotency, see
-- <https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/ Making retries safe with idempotent APIs>.
createRule_clientToken :: Lens.Lens' CreateRule (Prelude.Maybe Prelude.Text)
createRule_clientToken = Lens.lens (\CreateRule' {clientToken} -> clientToken) (\s@CreateRule' {} a -> s {clientToken = a} :: CreateRule)

-- | The identifier of the Amazon Connect instance. You can find the
-- instanceId in the ARN of the instance.
createRule_instanceId :: Lens.Lens' CreateRule Prelude.Text
createRule_instanceId = Lens.lens (\CreateRule' {instanceId} -> instanceId) (\s@CreateRule' {} a -> s {instanceId = a} :: CreateRule)

-- | A unique name for the rule.
createRule_name :: Lens.Lens' CreateRule Prelude.Text
createRule_name = Lens.lens (\CreateRule' {name} -> name) (\s@CreateRule' {} a -> s {name = a} :: CreateRule)

-- | The event source to trigger the rule.
createRule_triggerEventSource :: Lens.Lens' CreateRule RuleTriggerEventSource
createRule_triggerEventSource = Lens.lens (\CreateRule' {triggerEventSource} -> triggerEventSource) (\s@CreateRule' {} a -> s {triggerEventSource = a} :: CreateRule)

-- | The conditions of the rule.
createRule_function :: Lens.Lens' CreateRule Prelude.Text
createRule_function = Lens.lens (\CreateRule' {function} -> function) (\s@CreateRule' {} a -> s {function = a} :: CreateRule)

-- | A list of actions to be run when the rule is triggered.
createRule_actions :: Lens.Lens' CreateRule [RuleAction]
createRule_actions = Lens.lens (\CreateRule' {actions} -> actions) (\s@CreateRule' {} a -> s {actions = a} :: CreateRule) Prelude.. Lens.coerced

-- | The publish status of the rule.
createRule_publishStatus :: Lens.Lens' CreateRule RulePublishStatus
createRule_publishStatus = Lens.lens (\CreateRule' {publishStatus} -> publishStatus) (\s@CreateRule' {} a -> s {publishStatus = a} :: CreateRule)

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

instance Prelude.Hashable CreateRule where
  hashWithSalt _salt CreateRule' {..} =
    _salt
      `Prelude.hashWithSalt` clientToken
      `Prelude.hashWithSalt` instanceId
      `Prelude.hashWithSalt` name
      `Prelude.hashWithSalt` triggerEventSource
      `Prelude.hashWithSalt` function
      `Prelude.hashWithSalt` actions
      `Prelude.hashWithSalt` publishStatus

instance Prelude.NFData CreateRule where
  rnf CreateRule' {..} =
    Prelude.rnf clientToken
      `Prelude.seq` Prelude.rnf instanceId
      `Prelude.seq` Prelude.rnf name
      `Prelude.seq` Prelude.rnf triggerEventSource
      `Prelude.seq` Prelude.rnf function
      `Prelude.seq` Prelude.rnf actions
      `Prelude.seq` Prelude.rnf publishStatus

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

instance Data.ToJSON CreateRule where
  toJSON CreateRule' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("ClientToken" Data..=) Prelude.<$> clientToken,
            Prelude.Just ("Name" Data..= name),
            Prelude.Just
              ("TriggerEventSource" Data..= triggerEventSource),
            Prelude.Just ("Function" Data..= function),
            Prelude.Just ("Actions" Data..= actions),
            Prelude.Just
              ("PublishStatus" Data..= publishStatus)
          ]
      )

instance Data.ToPath CreateRule where
  toPath CreateRule' {..} =
    Prelude.mconcat ["/rules/", Data.toBS instanceId]

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

-- | /See:/ 'newCreateRuleResponse' smart constructor.
data CreateRuleResponse = CreateRuleResponse'
  { -- | The response's http status code.
    httpStatus :: Prelude.Int,
    -- | The Amazon Resource Name (ARN) of the rule.
    ruleArn :: Prelude.Text,
    -- | A unique identifier for the rule.
    ruleId :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'CreateRuleResponse' 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', 'createRuleResponse_httpStatus' - The response's http status code.
--
-- 'ruleArn', 'createRuleResponse_ruleArn' - The Amazon Resource Name (ARN) of the rule.
--
-- 'ruleId', 'createRuleResponse_ruleId' - A unique identifier for the rule.
newCreateRuleResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'ruleArn'
  Prelude.Text ->
  -- | 'ruleId'
  Prelude.Text ->
  CreateRuleResponse
newCreateRuleResponse pHttpStatus_ pRuleArn_ pRuleId_ =
  CreateRuleResponse'
    { httpStatus = pHttpStatus_,
      ruleArn = pRuleArn_,
      ruleId = pRuleId_
    }

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

-- | The Amazon Resource Name (ARN) of the rule.
createRuleResponse_ruleArn :: Lens.Lens' CreateRuleResponse Prelude.Text
createRuleResponse_ruleArn = Lens.lens (\CreateRuleResponse' {ruleArn} -> ruleArn) (\s@CreateRuleResponse' {} a -> s {ruleArn = a} :: CreateRuleResponse)

-- | A unique identifier for the rule.
createRuleResponse_ruleId :: Lens.Lens' CreateRuleResponse Prelude.Text
createRuleResponse_ruleId = Lens.lens (\CreateRuleResponse' {ruleId} -> ruleId) (\s@CreateRuleResponse' {} a -> s {ruleId = a} :: CreateRuleResponse)

instance Prelude.NFData CreateRuleResponse where
  rnf CreateRuleResponse' {..} =
    Prelude.rnf httpStatus
      `Prelude.seq` Prelude.rnf ruleArn
      `Prelude.seq` Prelude.rnf ruleId