packages feed

amazonka-connect-2.0: gen/Amazonka/Connect/Types/Rule.hs

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# 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.Types.Rule
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.Connect.Types.Rule where

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

-- | Information about a rule.
--
-- /See:/ 'newRule' smart constructor.
data Rule = Rule'
  { -- | The tags used to organize, track, or control access for this resource.
    -- For example, { \"tags\": {\"key1\":\"value1\", \"key2\":\"value2\"} }.
    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
    -- | The name of the rule.
    name :: Prelude.Text,
    -- | A unique identifier for the rule.
    ruleId :: Prelude.Text,
    -- | The Amazon Resource Name (ARN) of the rule.
    ruleArn :: 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,
    -- | The timestamp for when the rule was created.
    createdTime :: Data.POSIX,
    -- | The timestamp for the when the rule was last updated.
    lastUpdatedTime :: Data.POSIX,
    -- | The Amazon Resource Name (ARN) of the user who last updated the rule.
    lastUpdatedBy :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'Rule' 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:
--
-- 'tags', 'rule_tags' - The tags used to organize, track, or control access for this resource.
-- For example, { \"tags\": {\"key1\":\"value1\", \"key2\":\"value2\"} }.
--
-- 'name', 'rule_name' - The name of the rule.
--
-- 'ruleId', 'rule_ruleId' - A unique identifier for the rule.
--
-- 'ruleArn', 'rule_ruleArn' - The Amazon Resource Name (ARN) of the rule.
--
-- 'triggerEventSource', 'rule_triggerEventSource' - The event source to trigger the rule.
--
-- 'function', 'rule_function' - The conditions of the rule.
--
-- 'actions', 'rule_actions' - A list of actions to be run when the rule is triggered.
--
-- 'publishStatus', 'rule_publishStatus' - The publish status of the rule.
--
-- 'createdTime', 'rule_createdTime' - The timestamp for when the rule was created.
--
-- 'lastUpdatedTime', 'rule_lastUpdatedTime' - The timestamp for the when the rule was last updated.
--
-- 'lastUpdatedBy', 'rule_lastUpdatedBy' - The Amazon Resource Name (ARN) of the user who last updated the rule.
newRule ::
  -- | 'name'
  Prelude.Text ->
  -- | 'ruleId'
  Prelude.Text ->
  -- | 'ruleArn'
  Prelude.Text ->
  -- | 'triggerEventSource'
  RuleTriggerEventSource ->
  -- | 'function'
  Prelude.Text ->
  -- | 'publishStatus'
  RulePublishStatus ->
  -- | 'createdTime'
  Prelude.UTCTime ->
  -- | 'lastUpdatedTime'
  Prelude.UTCTime ->
  -- | 'lastUpdatedBy'
  Prelude.Text ->
  Rule
newRule
  pName_
  pRuleId_
  pRuleArn_
  pTriggerEventSource_
  pFunction_
  pPublishStatus_
  pCreatedTime_
  pLastUpdatedTime_
  pLastUpdatedBy_ =
    Rule'
      { tags = Prelude.Nothing,
        name = pName_,
        ruleId = pRuleId_,
        ruleArn = pRuleArn_,
        triggerEventSource = pTriggerEventSource_,
        function = pFunction_,
        actions = Prelude.mempty,
        publishStatus = pPublishStatus_,
        createdTime = Data._Time Lens.# pCreatedTime_,
        lastUpdatedTime =
          Data._Time Lens.# pLastUpdatedTime_,
        lastUpdatedBy = pLastUpdatedBy_
      }

-- | The tags used to organize, track, or control access for this resource.
-- For example, { \"tags\": {\"key1\":\"value1\", \"key2\":\"value2\"} }.
rule_tags :: Lens.Lens' Rule (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
rule_tags = Lens.lens (\Rule' {tags} -> tags) (\s@Rule' {} a -> s {tags = a} :: Rule) Prelude.. Lens.mapping Lens.coerced

-- | The name of the rule.
rule_name :: Lens.Lens' Rule Prelude.Text
rule_name = Lens.lens (\Rule' {name} -> name) (\s@Rule' {} a -> s {name = a} :: Rule)

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

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

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

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

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

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

-- | The timestamp for when the rule was created.
rule_createdTime :: Lens.Lens' Rule Prelude.UTCTime
rule_createdTime = Lens.lens (\Rule' {createdTime} -> createdTime) (\s@Rule' {} a -> s {createdTime = a} :: Rule) Prelude.. Data._Time

-- | The timestamp for the when the rule was last updated.
rule_lastUpdatedTime :: Lens.Lens' Rule Prelude.UTCTime
rule_lastUpdatedTime = Lens.lens (\Rule' {lastUpdatedTime} -> lastUpdatedTime) (\s@Rule' {} a -> s {lastUpdatedTime = a} :: Rule) Prelude.. Data._Time

-- | The Amazon Resource Name (ARN) of the user who last updated the rule.
rule_lastUpdatedBy :: Lens.Lens' Rule Prelude.Text
rule_lastUpdatedBy = Lens.lens (\Rule' {lastUpdatedBy} -> lastUpdatedBy) (\s@Rule' {} a -> s {lastUpdatedBy = a} :: Rule)

instance Data.FromJSON Rule where
  parseJSON =
    Data.withObject
      "Rule"
      ( \x ->
          Rule'
            Prelude.<$> (x Data..:? "Tags" Data..!= Prelude.mempty)
            Prelude.<*> (x Data..: "Name")
            Prelude.<*> (x Data..: "RuleId")
            Prelude.<*> (x Data..: "RuleArn")
            Prelude.<*> (x Data..: "TriggerEventSource")
            Prelude.<*> (x Data..: "Function")
            Prelude.<*> (x Data..:? "Actions" Data..!= Prelude.mempty)
            Prelude.<*> (x Data..: "PublishStatus")
            Prelude.<*> (x Data..: "CreatedTime")
            Prelude.<*> (x Data..: "LastUpdatedTime")
            Prelude.<*> (x Data..: "LastUpdatedBy")
      )

instance Prelude.Hashable Rule where
  hashWithSalt _salt Rule' {..} =
    _salt
      `Prelude.hashWithSalt` tags
      `Prelude.hashWithSalt` name
      `Prelude.hashWithSalt` ruleId
      `Prelude.hashWithSalt` ruleArn
      `Prelude.hashWithSalt` triggerEventSource
      `Prelude.hashWithSalt` function
      `Prelude.hashWithSalt` actions
      `Prelude.hashWithSalt` publishStatus
      `Prelude.hashWithSalt` createdTime
      `Prelude.hashWithSalt` lastUpdatedTime
      `Prelude.hashWithSalt` lastUpdatedBy

instance Prelude.NFData Rule where
  rnf Rule' {..} =
    Prelude.rnf tags
      `Prelude.seq` Prelude.rnf name
      `Prelude.seq` Prelude.rnf ruleId
      `Prelude.seq` Prelude.rnf ruleArn
      `Prelude.seq` Prelude.rnf triggerEventSource
      `Prelude.seq` Prelude.rnf function
      `Prelude.seq` Prelude.rnf actions
      `Prelude.seq` Prelude.rnf publishStatus
      `Prelude.seq` Prelude.rnf createdTime
      `Prelude.seq` Prelude.rnf lastUpdatedTime
      `Prelude.seq` Prelude.rnf lastUpdatedBy