{-# 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.Inspector2.Types.ResourceScanMetadata
-- 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.Inspector2.Types.ResourceScanMetadata where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.Inspector2.Types.Ec2Metadata
import Amazonka.Inspector2.Types.EcrContainerImageMetadata
import Amazonka.Inspector2.Types.EcrRepositoryMetadata
import Amazonka.Inspector2.Types.LambdaFunctionMetadata
import qualified Amazonka.Prelude as Prelude

-- | An object that contains details about the metadata for an Amazon ECR
-- resource.
--
-- /See:/ 'newResourceScanMetadata' smart constructor.
data ResourceScanMetadata = ResourceScanMetadata'
  { -- | An object that contains metadata details for an Amazon EC2 instance.
    ResourceScanMetadata -> Maybe Ec2Metadata
ec2 :: Prelude.Maybe Ec2Metadata,
    -- | An object that contains details about the container metadata for an
    -- Amazon ECR image.
    ResourceScanMetadata -> Maybe EcrContainerImageMetadata
ecrImage :: Prelude.Maybe EcrContainerImageMetadata,
    -- | An object that contains details about the repository an Amazon ECR image
    -- resides in.
    ResourceScanMetadata -> Maybe EcrRepositoryMetadata
ecrRepository :: Prelude.Maybe EcrRepositoryMetadata,
    -- | An object that contains metadata details for an AWS Lambda function.
    ResourceScanMetadata -> Maybe LambdaFunctionMetadata
lambdaFunction :: Prelude.Maybe LambdaFunctionMetadata
  }
  deriving (ResourceScanMetadata -> ResourceScanMetadata -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ResourceScanMetadata -> ResourceScanMetadata -> Bool
$c/= :: ResourceScanMetadata -> ResourceScanMetadata -> Bool
== :: ResourceScanMetadata -> ResourceScanMetadata -> Bool
$c== :: ResourceScanMetadata -> ResourceScanMetadata -> Bool
Prelude.Eq, ReadPrec [ResourceScanMetadata]
ReadPrec ResourceScanMetadata
Int -> ReadS ResourceScanMetadata
ReadS [ResourceScanMetadata]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ResourceScanMetadata]
$creadListPrec :: ReadPrec [ResourceScanMetadata]
readPrec :: ReadPrec ResourceScanMetadata
$creadPrec :: ReadPrec ResourceScanMetadata
readList :: ReadS [ResourceScanMetadata]
$creadList :: ReadS [ResourceScanMetadata]
readsPrec :: Int -> ReadS ResourceScanMetadata
$creadsPrec :: Int -> ReadS ResourceScanMetadata
Prelude.Read, Int -> ResourceScanMetadata -> ShowS
[ResourceScanMetadata] -> ShowS
ResourceScanMetadata -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ResourceScanMetadata] -> ShowS
$cshowList :: [ResourceScanMetadata] -> ShowS
show :: ResourceScanMetadata -> String
$cshow :: ResourceScanMetadata -> String
showsPrec :: Int -> ResourceScanMetadata -> ShowS
$cshowsPrec :: Int -> ResourceScanMetadata -> ShowS
Prelude.Show, forall x. Rep ResourceScanMetadata x -> ResourceScanMetadata
forall x. ResourceScanMetadata -> Rep ResourceScanMetadata x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ResourceScanMetadata x -> ResourceScanMetadata
$cfrom :: forall x. ResourceScanMetadata -> Rep ResourceScanMetadata x
Prelude.Generic)

-- |
-- Create a value of 'ResourceScanMetadata' 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:
--
-- 'ec2', 'resourceScanMetadata_ec2' - An object that contains metadata details for an Amazon EC2 instance.
--
-- 'ecrImage', 'resourceScanMetadata_ecrImage' - An object that contains details about the container metadata for an
-- Amazon ECR image.
--
-- 'ecrRepository', 'resourceScanMetadata_ecrRepository' - An object that contains details about the repository an Amazon ECR image
-- resides in.
--
-- 'lambdaFunction', 'resourceScanMetadata_lambdaFunction' - An object that contains metadata details for an AWS Lambda function.
newResourceScanMetadata ::
  ResourceScanMetadata
newResourceScanMetadata :: ResourceScanMetadata
newResourceScanMetadata =
  ResourceScanMetadata'
    { $sel:ec2:ResourceScanMetadata' :: Maybe Ec2Metadata
ec2 = forall a. Maybe a
Prelude.Nothing,
      $sel:ecrImage:ResourceScanMetadata' :: Maybe EcrContainerImageMetadata
ecrImage = forall a. Maybe a
Prelude.Nothing,
      $sel:ecrRepository:ResourceScanMetadata' :: Maybe EcrRepositoryMetadata
ecrRepository = forall a. Maybe a
Prelude.Nothing,
      $sel:lambdaFunction:ResourceScanMetadata' :: Maybe LambdaFunctionMetadata
lambdaFunction = forall a. Maybe a
Prelude.Nothing
    }

-- | An object that contains metadata details for an Amazon EC2 instance.
resourceScanMetadata_ec2 :: Lens.Lens' ResourceScanMetadata (Prelude.Maybe Ec2Metadata)
resourceScanMetadata_ec2 :: Lens' ResourceScanMetadata (Maybe Ec2Metadata)
resourceScanMetadata_ec2 = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ResourceScanMetadata' {Maybe Ec2Metadata
ec2 :: Maybe Ec2Metadata
$sel:ec2:ResourceScanMetadata' :: ResourceScanMetadata -> Maybe Ec2Metadata
ec2} -> Maybe Ec2Metadata
ec2) (\s :: ResourceScanMetadata
s@ResourceScanMetadata' {} Maybe Ec2Metadata
a -> ResourceScanMetadata
s {$sel:ec2:ResourceScanMetadata' :: Maybe Ec2Metadata
ec2 = Maybe Ec2Metadata
a} :: ResourceScanMetadata)

-- | An object that contains details about the container metadata for an
-- Amazon ECR image.
resourceScanMetadata_ecrImage :: Lens.Lens' ResourceScanMetadata (Prelude.Maybe EcrContainerImageMetadata)
resourceScanMetadata_ecrImage :: Lens' ResourceScanMetadata (Maybe EcrContainerImageMetadata)
resourceScanMetadata_ecrImage = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ResourceScanMetadata' {Maybe EcrContainerImageMetadata
ecrImage :: Maybe EcrContainerImageMetadata
$sel:ecrImage:ResourceScanMetadata' :: ResourceScanMetadata -> Maybe EcrContainerImageMetadata
ecrImage} -> Maybe EcrContainerImageMetadata
ecrImage) (\s :: ResourceScanMetadata
s@ResourceScanMetadata' {} Maybe EcrContainerImageMetadata
a -> ResourceScanMetadata
s {$sel:ecrImage:ResourceScanMetadata' :: Maybe EcrContainerImageMetadata
ecrImage = Maybe EcrContainerImageMetadata
a} :: ResourceScanMetadata)

-- | An object that contains details about the repository an Amazon ECR image
-- resides in.
resourceScanMetadata_ecrRepository :: Lens.Lens' ResourceScanMetadata (Prelude.Maybe EcrRepositoryMetadata)
resourceScanMetadata_ecrRepository :: Lens' ResourceScanMetadata (Maybe EcrRepositoryMetadata)
resourceScanMetadata_ecrRepository = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ResourceScanMetadata' {Maybe EcrRepositoryMetadata
ecrRepository :: Maybe EcrRepositoryMetadata
$sel:ecrRepository:ResourceScanMetadata' :: ResourceScanMetadata -> Maybe EcrRepositoryMetadata
ecrRepository} -> Maybe EcrRepositoryMetadata
ecrRepository) (\s :: ResourceScanMetadata
s@ResourceScanMetadata' {} Maybe EcrRepositoryMetadata
a -> ResourceScanMetadata
s {$sel:ecrRepository:ResourceScanMetadata' :: Maybe EcrRepositoryMetadata
ecrRepository = Maybe EcrRepositoryMetadata
a} :: ResourceScanMetadata)

-- | An object that contains metadata details for an AWS Lambda function.
resourceScanMetadata_lambdaFunction :: Lens.Lens' ResourceScanMetadata (Prelude.Maybe LambdaFunctionMetadata)
resourceScanMetadata_lambdaFunction :: Lens' ResourceScanMetadata (Maybe LambdaFunctionMetadata)
resourceScanMetadata_lambdaFunction = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ResourceScanMetadata' {Maybe LambdaFunctionMetadata
lambdaFunction :: Maybe LambdaFunctionMetadata
$sel:lambdaFunction:ResourceScanMetadata' :: ResourceScanMetadata -> Maybe LambdaFunctionMetadata
lambdaFunction} -> Maybe LambdaFunctionMetadata
lambdaFunction) (\s :: ResourceScanMetadata
s@ResourceScanMetadata' {} Maybe LambdaFunctionMetadata
a -> ResourceScanMetadata
s {$sel:lambdaFunction:ResourceScanMetadata' :: Maybe LambdaFunctionMetadata
lambdaFunction = Maybe LambdaFunctionMetadata
a} :: ResourceScanMetadata)

instance Data.FromJSON ResourceScanMetadata where
  parseJSON :: Value -> Parser ResourceScanMetadata
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"ResourceScanMetadata"
      ( \Object
x ->
          Maybe Ec2Metadata
-> Maybe EcrContainerImageMetadata
-> Maybe EcrRepositoryMetadata
-> Maybe LambdaFunctionMetadata
-> ResourceScanMetadata
ResourceScanMetadata'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ec2")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ecrImage")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ecrRepository")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"lambdaFunction")
      )

instance Prelude.Hashable ResourceScanMetadata where
  hashWithSalt :: Int -> ResourceScanMetadata -> Int
hashWithSalt Int
_salt ResourceScanMetadata' {Maybe Ec2Metadata
Maybe EcrContainerImageMetadata
Maybe EcrRepositoryMetadata
Maybe LambdaFunctionMetadata
lambdaFunction :: Maybe LambdaFunctionMetadata
ecrRepository :: Maybe EcrRepositoryMetadata
ecrImage :: Maybe EcrContainerImageMetadata
ec2 :: Maybe Ec2Metadata
$sel:lambdaFunction:ResourceScanMetadata' :: ResourceScanMetadata -> Maybe LambdaFunctionMetadata
$sel:ecrRepository:ResourceScanMetadata' :: ResourceScanMetadata -> Maybe EcrRepositoryMetadata
$sel:ecrImage:ResourceScanMetadata' :: ResourceScanMetadata -> Maybe EcrContainerImageMetadata
$sel:ec2:ResourceScanMetadata' :: ResourceScanMetadata -> Maybe Ec2Metadata
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Ec2Metadata
ec2
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe EcrContainerImageMetadata
ecrImage
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe EcrRepositoryMetadata
ecrRepository
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe LambdaFunctionMetadata
lambdaFunction

instance Prelude.NFData ResourceScanMetadata where
  rnf :: ResourceScanMetadata -> ()
rnf ResourceScanMetadata' {Maybe Ec2Metadata
Maybe EcrContainerImageMetadata
Maybe EcrRepositoryMetadata
Maybe LambdaFunctionMetadata
lambdaFunction :: Maybe LambdaFunctionMetadata
ecrRepository :: Maybe EcrRepositoryMetadata
ecrImage :: Maybe EcrContainerImageMetadata
ec2 :: Maybe Ec2Metadata
$sel:lambdaFunction:ResourceScanMetadata' :: ResourceScanMetadata -> Maybe LambdaFunctionMetadata
$sel:ecrRepository:ResourceScanMetadata' :: ResourceScanMetadata -> Maybe EcrRepositoryMetadata
$sel:ecrImage:ResourceScanMetadata' :: ResourceScanMetadata -> Maybe EcrContainerImageMetadata
$sel:ec2:ResourceScanMetadata' :: ResourceScanMetadata -> Maybe Ec2Metadata
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Ec2Metadata
ec2
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe EcrContainerImageMetadata
ecrImage
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe EcrRepositoryMetadata
ecrRepository
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe LambdaFunctionMetadata
lambdaFunction