packages feed

amazonka-securityhub-2.0: gen/Amazonka/SecurityHub/Types/Resource.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.SecurityHub.Types.Resource
-- 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.SecurityHub.Types.Resource 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 Amazonka.SecurityHub.Types.DataClassificationDetails
import Amazonka.SecurityHub.Types.Partition
import Amazonka.SecurityHub.Types.ResourceDetails

-- | A resource related to a finding.
--
-- /See:/ 'newResource' smart constructor.
data Resource = Resource'
  { -- | Contains information about sensitive data that was detected on the
    -- resource.
    dataClassification :: Prelude.Maybe DataClassificationDetails,
    -- | Additional details about the resource related to a finding.
    details :: Prelude.Maybe ResourceDetails,
    -- | The canonical Amazon Web Services partition name that the Region is
    -- assigned to.
    partition :: Prelude.Maybe Partition,
    -- | The canonical Amazon Web Services external Region name where this
    -- resource is located.
    region :: Prelude.Maybe Prelude.Text,
    -- | Identifies the role of the resource in the finding. A resource is either
    -- the actor or target of the finding activity,
    resourceRole :: Prelude.Maybe Prelude.Text,
    -- | A list of Amazon Web Services tags associated with a resource at the
    -- time the finding was processed.
    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
    -- | The type of the resource that details are provided for. If possible, set
    -- @Type@ to one of the supported resource types. For example, if the
    -- resource is an EC2 instance, then set @Type@ to @AwsEc2Instance@.
    --
    -- If the resource does not match any of the provided types, then set
    -- @Type@ to @Other@.
    type' :: Prelude.Text,
    -- | The canonical identifier for the given resource type.
    id :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'Resource' 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:
--
-- 'dataClassification', 'resource_dataClassification' - Contains information about sensitive data that was detected on the
-- resource.
--
-- 'details', 'resource_details' - Additional details about the resource related to a finding.
--
-- 'partition', 'resource_partition' - The canonical Amazon Web Services partition name that the Region is
-- assigned to.
--
-- 'region', 'resource_region' - The canonical Amazon Web Services external Region name where this
-- resource is located.
--
-- 'resourceRole', 'resource_resourceRole' - Identifies the role of the resource in the finding. A resource is either
-- the actor or target of the finding activity,
--
-- 'tags', 'resource_tags' - A list of Amazon Web Services tags associated with a resource at the
-- time the finding was processed.
--
-- 'type'', 'resource_type' - The type of the resource that details are provided for. If possible, set
-- @Type@ to one of the supported resource types. For example, if the
-- resource is an EC2 instance, then set @Type@ to @AwsEc2Instance@.
--
-- If the resource does not match any of the provided types, then set
-- @Type@ to @Other@.
--
-- 'id', 'resource_id' - The canonical identifier for the given resource type.
newResource ::
  -- | 'type''
  Prelude.Text ->
  -- | 'id'
  Prelude.Text ->
  Resource
newResource pType_ pId_ =
  Resource'
    { dataClassification = Prelude.Nothing,
      details = Prelude.Nothing,
      partition = Prelude.Nothing,
      region = Prelude.Nothing,
      resourceRole = Prelude.Nothing,
      tags = Prelude.Nothing,
      type' = pType_,
      id = pId_
    }

-- | Contains information about sensitive data that was detected on the
-- resource.
resource_dataClassification :: Lens.Lens' Resource (Prelude.Maybe DataClassificationDetails)
resource_dataClassification = Lens.lens (\Resource' {dataClassification} -> dataClassification) (\s@Resource' {} a -> s {dataClassification = a} :: Resource)

-- | Additional details about the resource related to a finding.
resource_details :: Lens.Lens' Resource (Prelude.Maybe ResourceDetails)
resource_details = Lens.lens (\Resource' {details} -> details) (\s@Resource' {} a -> s {details = a} :: Resource)

-- | The canonical Amazon Web Services partition name that the Region is
-- assigned to.
resource_partition :: Lens.Lens' Resource (Prelude.Maybe Partition)
resource_partition = Lens.lens (\Resource' {partition} -> partition) (\s@Resource' {} a -> s {partition = a} :: Resource)

-- | The canonical Amazon Web Services external Region name where this
-- resource is located.
resource_region :: Lens.Lens' Resource (Prelude.Maybe Prelude.Text)
resource_region = Lens.lens (\Resource' {region} -> region) (\s@Resource' {} a -> s {region = a} :: Resource)

-- | Identifies the role of the resource in the finding. A resource is either
-- the actor or target of the finding activity,
resource_resourceRole :: Lens.Lens' Resource (Prelude.Maybe Prelude.Text)
resource_resourceRole = Lens.lens (\Resource' {resourceRole} -> resourceRole) (\s@Resource' {} a -> s {resourceRole = a} :: Resource)

-- | A list of Amazon Web Services tags associated with a resource at the
-- time the finding was processed.
resource_tags :: Lens.Lens' Resource (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
resource_tags = Lens.lens (\Resource' {tags} -> tags) (\s@Resource' {} a -> s {tags = a} :: Resource) Prelude.. Lens.mapping Lens.coerced

-- | The type of the resource that details are provided for. If possible, set
-- @Type@ to one of the supported resource types. For example, if the
-- resource is an EC2 instance, then set @Type@ to @AwsEc2Instance@.
--
-- If the resource does not match any of the provided types, then set
-- @Type@ to @Other@.
resource_type :: Lens.Lens' Resource Prelude.Text
resource_type = Lens.lens (\Resource' {type'} -> type') (\s@Resource' {} a -> s {type' = a} :: Resource)

-- | The canonical identifier for the given resource type.
resource_id :: Lens.Lens' Resource Prelude.Text
resource_id = Lens.lens (\Resource' {id} -> id) (\s@Resource' {} a -> s {id = a} :: Resource)

instance Data.FromJSON Resource where
  parseJSON =
    Data.withObject
      "Resource"
      ( \x ->
          Resource'
            Prelude.<$> (x Data..:? "DataClassification")
            Prelude.<*> (x Data..:? "Details")
            Prelude.<*> (x Data..:? "Partition")
            Prelude.<*> (x Data..:? "Region")
            Prelude.<*> (x Data..:? "ResourceRole")
            Prelude.<*> (x Data..:? "Tags" Data..!= Prelude.mempty)
            Prelude.<*> (x Data..: "Type")
            Prelude.<*> (x Data..: "Id")
      )

instance Prelude.Hashable Resource where
  hashWithSalt _salt Resource' {..} =
    _salt
      `Prelude.hashWithSalt` dataClassification
      `Prelude.hashWithSalt` details
      `Prelude.hashWithSalt` partition
      `Prelude.hashWithSalt` region
      `Prelude.hashWithSalt` resourceRole
      `Prelude.hashWithSalt` tags
      `Prelude.hashWithSalt` type'
      `Prelude.hashWithSalt` id

instance Prelude.NFData Resource where
  rnf Resource' {..} =
    Prelude.rnf dataClassification
      `Prelude.seq` Prelude.rnf details
      `Prelude.seq` Prelude.rnf partition
      `Prelude.seq` Prelude.rnf region
      `Prelude.seq` Prelude.rnf resourceRole
      `Prelude.seq` Prelude.rnf tags
      `Prelude.seq` Prelude.rnf type'
      `Prelude.seq` Prelude.rnf id

instance Data.ToJSON Resource where
  toJSON Resource' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("DataClassification" Data..=)
              Prelude.<$> dataClassification,
            ("Details" Data..=) Prelude.<$> details,
            ("Partition" Data..=) Prelude.<$> partition,
            ("Region" Data..=) Prelude.<$> region,
            ("ResourceRole" Data..=) Prelude.<$> resourceRole,
            ("Tags" Data..=) Prelude.<$> tags,
            Prelude.Just ("Type" Data..= type'),
            Prelude.Just ("Id" Data..= id)
          ]
      )