packages feed

amazonka-config-2.0: gen/Amazonka/Config/Types/ResourceDetails.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.Config.Types.ResourceDetails
-- 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.Config.Types.ResourceDetails where

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

-- | Returns information about the resource being evaluated.
--
-- /See:/ 'newResourceDetails' smart constructor.
data ResourceDetails = ResourceDetails'
  { -- | The schema type of the resource configuration.
    resourceConfigurationSchemaType :: Prelude.Maybe ResourceConfigurationSchemaType,
    -- | A unique resource ID for an evaluation.
    resourceId :: Prelude.Text,
    -- | The type of resource being evaluated.
    resourceType :: Prelude.Text,
    -- | The resource definition to be evaluated as per the resource
    -- configuration schema type.
    resourceConfiguration :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'ResourceDetails' 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:
--
-- 'resourceConfigurationSchemaType', 'resourceDetails_resourceConfigurationSchemaType' - The schema type of the resource configuration.
--
-- 'resourceId', 'resourceDetails_resourceId' - A unique resource ID for an evaluation.
--
-- 'resourceType', 'resourceDetails_resourceType' - The type of resource being evaluated.
--
-- 'resourceConfiguration', 'resourceDetails_resourceConfiguration' - The resource definition to be evaluated as per the resource
-- configuration schema type.
newResourceDetails ::
  -- | 'resourceId'
  Prelude.Text ->
  -- | 'resourceType'
  Prelude.Text ->
  -- | 'resourceConfiguration'
  Prelude.Text ->
  ResourceDetails
newResourceDetails
  pResourceId_
  pResourceType_
  pResourceConfiguration_ =
    ResourceDetails'
      { resourceConfigurationSchemaType =
          Prelude.Nothing,
        resourceId = pResourceId_,
        resourceType = pResourceType_,
        resourceConfiguration = pResourceConfiguration_
      }

-- | The schema type of the resource configuration.
resourceDetails_resourceConfigurationSchemaType :: Lens.Lens' ResourceDetails (Prelude.Maybe ResourceConfigurationSchemaType)
resourceDetails_resourceConfigurationSchemaType = Lens.lens (\ResourceDetails' {resourceConfigurationSchemaType} -> resourceConfigurationSchemaType) (\s@ResourceDetails' {} a -> s {resourceConfigurationSchemaType = a} :: ResourceDetails)

-- | A unique resource ID for an evaluation.
resourceDetails_resourceId :: Lens.Lens' ResourceDetails Prelude.Text
resourceDetails_resourceId = Lens.lens (\ResourceDetails' {resourceId} -> resourceId) (\s@ResourceDetails' {} a -> s {resourceId = a} :: ResourceDetails)

-- | The type of resource being evaluated.
resourceDetails_resourceType :: Lens.Lens' ResourceDetails Prelude.Text
resourceDetails_resourceType = Lens.lens (\ResourceDetails' {resourceType} -> resourceType) (\s@ResourceDetails' {} a -> s {resourceType = a} :: ResourceDetails)

-- | The resource definition to be evaluated as per the resource
-- configuration schema type.
resourceDetails_resourceConfiguration :: Lens.Lens' ResourceDetails Prelude.Text
resourceDetails_resourceConfiguration = Lens.lens (\ResourceDetails' {resourceConfiguration} -> resourceConfiguration) (\s@ResourceDetails' {} a -> s {resourceConfiguration = a} :: ResourceDetails)

instance Data.FromJSON ResourceDetails where
  parseJSON =
    Data.withObject
      "ResourceDetails"
      ( \x ->
          ResourceDetails'
            Prelude.<$> (x Data..:? "ResourceConfigurationSchemaType")
            Prelude.<*> (x Data..: "ResourceId")
            Prelude.<*> (x Data..: "ResourceType")
            Prelude.<*> (x Data..: "ResourceConfiguration")
      )

instance Prelude.Hashable ResourceDetails where
  hashWithSalt _salt ResourceDetails' {..} =
    _salt
      `Prelude.hashWithSalt` resourceConfigurationSchemaType
      `Prelude.hashWithSalt` resourceId
      `Prelude.hashWithSalt` resourceType
      `Prelude.hashWithSalt` resourceConfiguration

instance Prelude.NFData ResourceDetails where
  rnf ResourceDetails' {..} =
    Prelude.rnf resourceConfigurationSchemaType
      `Prelude.seq` Prelude.rnf resourceId
      `Prelude.seq` Prelude.rnf resourceType
      `Prelude.seq` Prelude.rnf resourceConfiguration

instance Data.ToJSON ResourceDetails where
  toJSON ResourceDetails' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("ResourceConfigurationSchemaType" Data..=)
              Prelude.<$> resourceConfigurationSchemaType,
            Prelude.Just ("ResourceId" Data..= resourceId),
            Prelude.Just ("ResourceType" Data..= resourceType),
            Prelude.Just
              ( "ResourceConfiguration"
                  Data..= resourceConfiguration
              )
          ]
      )