packages feed

amazonka-iot-2.0: gen/Amazonka/IoT/Types/ThingGroupIndexingConfiguration.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.IoT.Types.ThingGroupIndexingConfiguration
-- 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.IoT.Types.ThingGroupIndexingConfiguration where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.IoT.Types.Field
import Amazonka.IoT.Types.ThingGroupIndexingMode
import qualified Amazonka.Prelude as Prelude

-- | Thing group indexing configuration.
--
-- /See:/ 'newThingGroupIndexingConfiguration' smart constructor.
data ThingGroupIndexingConfiguration = ThingGroupIndexingConfiguration'
  { -- | A list of thing group fields to index. This list cannot contain any
    -- managed fields. Use the GetIndexingConfiguration API to get a list of
    -- managed fields.
    --
    -- Contains custom field names and their data type.
    customFields :: Prelude.Maybe [Field],
    -- | Contains fields that are indexed and whose types are already known by
    -- the Fleet Indexing service. This is an optional field. For more
    -- information, see
    -- <https://docs.aws.amazon.com/iot/latest/developerguide/managing-fleet-index.html#managed-field Managed fields>
    -- in the /Amazon Web Services IoT Core Developer Guide/.
    managedFields :: Prelude.Maybe [Field],
    -- | Thing group indexing mode.
    thingGroupIndexingMode :: ThingGroupIndexingMode
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'ThingGroupIndexingConfiguration' 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:
--
-- 'customFields', 'thingGroupIndexingConfiguration_customFields' - A list of thing group fields to index. This list cannot contain any
-- managed fields. Use the GetIndexingConfiguration API to get a list of
-- managed fields.
--
-- Contains custom field names and their data type.
--
-- 'managedFields', 'thingGroupIndexingConfiguration_managedFields' - Contains fields that are indexed and whose types are already known by
-- the Fleet Indexing service. This is an optional field. For more
-- information, see
-- <https://docs.aws.amazon.com/iot/latest/developerguide/managing-fleet-index.html#managed-field Managed fields>
-- in the /Amazon Web Services IoT Core Developer Guide/.
--
-- 'thingGroupIndexingMode', 'thingGroupIndexingConfiguration_thingGroupIndexingMode' - Thing group indexing mode.
newThingGroupIndexingConfiguration ::
  -- | 'thingGroupIndexingMode'
  ThingGroupIndexingMode ->
  ThingGroupIndexingConfiguration
newThingGroupIndexingConfiguration
  pThingGroupIndexingMode_ =
    ThingGroupIndexingConfiguration'
      { customFields =
          Prelude.Nothing,
        managedFields = Prelude.Nothing,
        thingGroupIndexingMode =
          pThingGroupIndexingMode_
      }

-- | A list of thing group fields to index. This list cannot contain any
-- managed fields. Use the GetIndexingConfiguration API to get a list of
-- managed fields.
--
-- Contains custom field names and their data type.
thingGroupIndexingConfiguration_customFields :: Lens.Lens' ThingGroupIndexingConfiguration (Prelude.Maybe [Field])
thingGroupIndexingConfiguration_customFields = Lens.lens (\ThingGroupIndexingConfiguration' {customFields} -> customFields) (\s@ThingGroupIndexingConfiguration' {} a -> s {customFields = a} :: ThingGroupIndexingConfiguration) Prelude.. Lens.mapping Lens.coerced

-- | Contains fields that are indexed and whose types are already known by
-- the Fleet Indexing service. This is an optional field. For more
-- information, see
-- <https://docs.aws.amazon.com/iot/latest/developerguide/managing-fleet-index.html#managed-field Managed fields>
-- in the /Amazon Web Services IoT Core Developer Guide/.
thingGroupIndexingConfiguration_managedFields :: Lens.Lens' ThingGroupIndexingConfiguration (Prelude.Maybe [Field])
thingGroupIndexingConfiguration_managedFields = Lens.lens (\ThingGroupIndexingConfiguration' {managedFields} -> managedFields) (\s@ThingGroupIndexingConfiguration' {} a -> s {managedFields = a} :: ThingGroupIndexingConfiguration) Prelude.. Lens.mapping Lens.coerced

-- | Thing group indexing mode.
thingGroupIndexingConfiguration_thingGroupIndexingMode :: Lens.Lens' ThingGroupIndexingConfiguration ThingGroupIndexingMode
thingGroupIndexingConfiguration_thingGroupIndexingMode = Lens.lens (\ThingGroupIndexingConfiguration' {thingGroupIndexingMode} -> thingGroupIndexingMode) (\s@ThingGroupIndexingConfiguration' {} a -> s {thingGroupIndexingMode = a} :: ThingGroupIndexingConfiguration)

instance
  Data.FromJSON
    ThingGroupIndexingConfiguration
  where
  parseJSON =
    Data.withObject
      "ThingGroupIndexingConfiguration"
      ( \x ->
          ThingGroupIndexingConfiguration'
            Prelude.<$> (x Data..:? "customFields" Data..!= Prelude.mempty)
            Prelude.<*> (x Data..:? "managedFields" Data..!= Prelude.mempty)
            Prelude.<*> (x Data..: "thingGroupIndexingMode")
      )

instance
  Prelude.Hashable
    ThingGroupIndexingConfiguration
  where
  hashWithSalt
    _salt
    ThingGroupIndexingConfiguration' {..} =
      _salt
        `Prelude.hashWithSalt` customFields
        `Prelude.hashWithSalt` managedFields
        `Prelude.hashWithSalt` thingGroupIndexingMode

instance
  Prelude.NFData
    ThingGroupIndexingConfiguration
  where
  rnf ThingGroupIndexingConfiguration' {..} =
    Prelude.rnf customFields
      `Prelude.seq` Prelude.rnf managedFields
      `Prelude.seq` Prelude.rnf thingGroupIndexingMode

instance Data.ToJSON ThingGroupIndexingConfiguration where
  toJSON ThingGroupIndexingConfiguration' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("customFields" Data..=) Prelude.<$> customFields,
            ("managedFields" Data..=) Prelude.<$> managedFields,
            Prelude.Just
              ( "thingGroupIndexingMode"
                  Data..= thingGroupIndexingMode
              )
          ]
      )