{-# 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.LambdaLayerAggregation
-- 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.LambdaLayerAggregation 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.LambdaLayerSortBy
import Amazonka.Inspector2.Types.SortOrder
import Amazonka.Inspector2.Types.StringFilter
import qualified Amazonka.Prelude as Prelude

-- | The details that define a findings aggregation based on an AWS Lambda
-- function\'s layers.
--
-- /See:/ 'newLambdaLayerAggregation' smart constructor.
data LambdaLayerAggregation = LambdaLayerAggregation'
  { -- | The names of the AWS Lambda functions associated with the layers.
    LambdaLayerAggregation -> Maybe (NonEmpty StringFilter)
functionNames :: Prelude.Maybe (Prelude.NonEmpty StringFilter),
    -- | The Amazon Resource Name (ARN) of the AWS Lambda function layer.
    LambdaLayerAggregation -> Maybe (NonEmpty StringFilter)
layerArns :: Prelude.Maybe (Prelude.NonEmpty StringFilter),
    -- | The resource IDs for the AWS Lambda function layers.
    LambdaLayerAggregation -> Maybe (NonEmpty StringFilter)
resourceIds :: Prelude.Maybe (Prelude.NonEmpty StringFilter),
    -- | The finding severity to use for sorting the results.
    LambdaLayerAggregation -> Maybe LambdaLayerSortBy
sortBy :: Prelude.Maybe LambdaLayerSortBy,
    -- | The order to use for sorting the results.
    LambdaLayerAggregation -> Maybe SortOrder
sortOrder :: Prelude.Maybe SortOrder
  }
  deriving (LambdaLayerAggregation -> LambdaLayerAggregation -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: LambdaLayerAggregation -> LambdaLayerAggregation -> Bool
$c/= :: LambdaLayerAggregation -> LambdaLayerAggregation -> Bool
== :: LambdaLayerAggregation -> LambdaLayerAggregation -> Bool
$c== :: LambdaLayerAggregation -> LambdaLayerAggregation -> Bool
Prelude.Eq, ReadPrec [LambdaLayerAggregation]
ReadPrec LambdaLayerAggregation
Int -> ReadS LambdaLayerAggregation
ReadS [LambdaLayerAggregation]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [LambdaLayerAggregation]
$creadListPrec :: ReadPrec [LambdaLayerAggregation]
readPrec :: ReadPrec LambdaLayerAggregation
$creadPrec :: ReadPrec LambdaLayerAggregation
readList :: ReadS [LambdaLayerAggregation]
$creadList :: ReadS [LambdaLayerAggregation]
readsPrec :: Int -> ReadS LambdaLayerAggregation
$creadsPrec :: Int -> ReadS LambdaLayerAggregation
Prelude.Read, Int -> LambdaLayerAggregation -> ShowS
[LambdaLayerAggregation] -> ShowS
LambdaLayerAggregation -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [LambdaLayerAggregation] -> ShowS
$cshowList :: [LambdaLayerAggregation] -> ShowS
show :: LambdaLayerAggregation -> String
$cshow :: LambdaLayerAggregation -> String
showsPrec :: Int -> LambdaLayerAggregation -> ShowS
$cshowsPrec :: Int -> LambdaLayerAggregation -> ShowS
Prelude.Show, forall x. Rep LambdaLayerAggregation x -> LambdaLayerAggregation
forall x. LambdaLayerAggregation -> Rep LambdaLayerAggregation x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep LambdaLayerAggregation x -> LambdaLayerAggregation
$cfrom :: forall x. LambdaLayerAggregation -> Rep LambdaLayerAggregation x
Prelude.Generic)

-- |
-- Create a value of 'LambdaLayerAggregation' 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:
--
-- 'functionNames', 'lambdaLayerAggregation_functionNames' - The names of the AWS Lambda functions associated with the layers.
--
-- 'layerArns', 'lambdaLayerAggregation_layerArns' - The Amazon Resource Name (ARN) of the AWS Lambda function layer.
--
-- 'resourceIds', 'lambdaLayerAggregation_resourceIds' - The resource IDs for the AWS Lambda function layers.
--
-- 'sortBy', 'lambdaLayerAggregation_sortBy' - The finding severity to use for sorting the results.
--
-- 'sortOrder', 'lambdaLayerAggregation_sortOrder' - The order to use for sorting the results.
newLambdaLayerAggregation ::
  LambdaLayerAggregation
newLambdaLayerAggregation :: LambdaLayerAggregation
newLambdaLayerAggregation =
  LambdaLayerAggregation'
    { $sel:functionNames:LambdaLayerAggregation' :: Maybe (NonEmpty StringFilter)
functionNames =
        forall a. Maybe a
Prelude.Nothing,
      $sel:layerArns:LambdaLayerAggregation' :: Maybe (NonEmpty StringFilter)
layerArns = forall a. Maybe a
Prelude.Nothing,
      $sel:resourceIds:LambdaLayerAggregation' :: Maybe (NonEmpty StringFilter)
resourceIds = forall a. Maybe a
Prelude.Nothing,
      $sel:sortBy:LambdaLayerAggregation' :: Maybe LambdaLayerSortBy
sortBy = forall a. Maybe a
Prelude.Nothing,
      $sel:sortOrder:LambdaLayerAggregation' :: Maybe SortOrder
sortOrder = forall a. Maybe a
Prelude.Nothing
    }

-- | The names of the AWS Lambda functions associated with the layers.
lambdaLayerAggregation_functionNames :: Lens.Lens' LambdaLayerAggregation (Prelude.Maybe (Prelude.NonEmpty StringFilter))
lambdaLayerAggregation_functionNames :: Lens' LambdaLayerAggregation (Maybe (NonEmpty StringFilter))
lambdaLayerAggregation_functionNames = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LambdaLayerAggregation' {Maybe (NonEmpty StringFilter)
functionNames :: Maybe (NonEmpty StringFilter)
$sel:functionNames:LambdaLayerAggregation' :: LambdaLayerAggregation -> Maybe (NonEmpty StringFilter)
functionNames} -> Maybe (NonEmpty StringFilter)
functionNames) (\s :: LambdaLayerAggregation
s@LambdaLayerAggregation' {} Maybe (NonEmpty StringFilter)
a -> LambdaLayerAggregation
s {$sel:functionNames:LambdaLayerAggregation' :: Maybe (NonEmpty StringFilter)
functionNames = Maybe (NonEmpty StringFilter)
a} :: LambdaLayerAggregation) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The Amazon Resource Name (ARN) of the AWS Lambda function layer.
lambdaLayerAggregation_layerArns :: Lens.Lens' LambdaLayerAggregation (Prelude.Maybe (Prelude.NonEmpty StringFilter))
lambdaLayerAggregation_layerArns :: Lens' LambdaLayerAggregation (Maybe (NonEmpty StringFilter))
lambdaLayerAggregation_layerArns = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LambdaLayerAggregation' {Maybe (NonEmpty StringFilter)
layerArns :: Maybe (NonEmpty StringFilter)
$sel:layerArns:LambdaLayerAggregation' :: LambdaLayerAggregation -> Maybe (NonEmpty StringFilter)
layerArns} -> Maybe (NonEmpty StringFilter)
layerArns) (\s :: LambdaLayerAggregation
s@LambdaLayerAggregation' {} Maybe (NonEmpty StringFilter)
a -> LambdaLayerAggregation
s {$sel:layerArns:LambdaLayerAggregation' :: Maybe (NonEmpty StringFilter)
layerArns = Maybe (NonEmpty StringFilter)
a} :: LambdaLayerAggregation) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The resource IDs for the AWS Lambda function layers.
lambdaLayerAggregation_resourceIds :: Lens.Lens' LambdaLayerAggregation (Prelude.Maybe (Prelude.NonEmpty StringFilter))
lambdaLayerAggregation_resourceIds :: Lens' LambdaLayerAggregation (Maybe (NonEmpty StringFilter))
lambdaLayerAggregation_resourceIds = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LambdaLayerAggregation' {Maybe (NonEmpty StringFilter)
resourceIds :: Maybe (NonEmpty StringFilter)
$sel:resourceIds:LambdaLayerAggregation' :: LambdaLayerAggregation -> Maybe (NonEmpty StringFilter)
resourceIds} -> Maybe (NonEmpty StringFilter)
resourceIds) (\s :: LambdaLayerAggregation
s@LambdaLayerAggregation' {} Maybe (NonEmpty StringFilter)
a -> LambdaLayerAggregation
s {$sel:resourceIds:LambdaLayerAggregation' :: Maybe (NonEmpty StringFilter)
resourceIds = Maybe (NonEmpty StringFilter)
a} :: LambdaLayerAggregation) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The finding severity to use for sorting the results.
lambdaLayerAggregation_sortBy :: Lens.Lens' LambdaLayerAggregation (Prelude.Maybe LambdaLayerSortBy)
lambdaLayerAggregation_sortBy :: Lens' LambdaLayerAggregation (Maybe LambdaLayerSortBy)
lambdaLayerAggregation_sortBy = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LambdaLayerAggregation' {Maybe LambdaLayerSortBy
sortBy :: Maybe LambdaLayerSortBy
$sel:sortBy:LambdaLayerAggregation' :: LambdaLayerAggregation -> Maybe LambdaLayerSortBy
sortBy} -> Maybe LambdaLayerSortBy
sortBy) (\s :: LambdaLayerAggregation
s@LambdaLayerAggregation' {} Maybe LambdaLayerSortBy
a -> LambdaLayerAggregation
s {$sel:sortBy:LambdaLayerAggregation' :: Maybe LambdaLayerSortBy
sortBy = Maybe LambdaLayerSortBy
a} :: LambdaLayerAggregation)

-- | The order to use for sorting the results.
lambdaLayerAggregation_sortOrder :: Lens.Lens' LambdaLayerAggregation (Prelude.Maybe SortOrder)
lambdaLayerAggregation_sortOrder :: Lens' LambdaLayerAggregation (Maybe SortOrder)
lambdaLayerAggregation_sortOrder = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\LambdaLayerAggregation' {Maybe SortOrder
sortOrder :: Maybe SortOrder
$sel:sortOrder:LambdaLayerAggregation' :: LambdaLayerAggregation -> Maybe SortOrder
sortOrder} -> Maybe SortOrder
sortOrder) (\s :: LambdaLayerAggregation
s@LambdaLayerAggregation' {} Maybe SortOrder
a -> LambdaLayerAggregation
s {$sel:sortOrder:LambdaLayerAggregation' :: Maybe SortOrder
sortOrder = Maybe SortOrder
a} :: LambdaLayerAggregation)

instance Prelude.Hashable LambdaLayerAggregation where
  hashWithSalt :: Int -> LambdaLayerAggregation -> Int
hashWithSalt Int
_salt LambdaLayerAggregation' {Maybe (NonEmpty StringFilter)
Maybe LambdaLayerSortBy
Maybe SortOrder
sortOrder :: Maybe SortOrder
sortBy :: Maybe LambdaLayerSortBy
resourceIds :: Maybe (NonEmpty StringFilter)
layerArns :: Maybe (NonEmpty StringFilter)
functionNames :: Maybe (NonEmpty StringFilter)
$sel:sortOrder:LambdaLayerAggregation' :: LambdaLayerAggregation -> Maybe SortOrder
$sel:sortBy:LambdaLayerAggregation' :: LambdaLayerAggregation -> Maybe LambdaLayerSortBy
$sel:resourceIds:LambdaLayerAggregation' :: LambdaLayerAggregation -> Maybe (NonEmpty StringFilter)
$sel:layerArns:LambdaLayerAggregation' :: LambdaLayerAggregation -> Maybe (NonEmpty StringFilter)
$sel:functionNames:LambdaLayerAggregation' :: LambdaLayerAggregation -> Maybe (NonEmpty StringFilter)
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (NonEmpty StringFilter)
functionNames
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (NonEmpty StringFilter)
layerArns
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (NonEmpty StringFilter)
resourceIds
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe LambdaLayerSortBy
sortBy
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe SortOrder
sortOrder

instance Prelude.NFData LambdaLayerAggregation where
  rnf :: LambdaLayerAggregation -> ()
rnf LambdaLayerAggregation' {Maybe (NonEmpty StringFilter)
Maybe LambdaLayerSortBy
Maybe SortOrder
sortOrder :: Maybe SortOrder
sortBy :: Maybe LambdaLayerSortBy
resourceIds :: Maybe (NonEmpty StringFilter)
layerArns :: Maybe (NonEmpty StringFilter)
functionNames :: Maybe (NonEmpty StringFilter)
$sel:sortOrder:LambdaLayerAggregation' :: LambdaLayerAggregation -> Maybe SortOrder
$sel:sortBy:LambdaLayerAggregation' :: LambdaLayerAggregation -> Maybe LambdaLayerSortBy
$sel:resourceIds:LambdaLayerAggregation' :: LambdaLayerAggregation -> Maybe (NonEmpty StringFilter)
$sel:layerArns:LambdaLayerAggregation' :: LambdaLayerAggregation -> Maybe (NonEmpty StringFilter)
$sel:functionNames:LambdaLayerAggregation' :: LambdaLayerAggregation -> Maybe (NonEmpty StringFilter)
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe (NonEmpty StringFilter)
functionNames
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (NonEmpty StringFilter)
layerArns
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (NonEmpty StringFilter)
resourceIds
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe LambdaLayerSortBy
sortBy
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe SortOrder
sortOrder

instance Data.ToJSON LambdaLayerAggregation where
  toJSON :: LambdaLayerAggregation -> Value
toJSON LambdaLayerAggregation' {Maybe (NonEmpty StringFilter)
Maybe LambdaLayerSortBy
Maybe SortOrder
sortOrder :: Maybe SortOrder
sortBy :: Maybe LambdaLayerSortBy
resourceIds :: Maybe (NonEmpty StringFilter)
layerArns :: Maybe (NonEmpty StringFilter)
functionNames :: Maybe (NonEmpty StringFilter)
$sel:sortOrder:LambdaLayerAggregation' :: LambdaLayerAggregation -> Maybe SortOrder
$sel:sortBy:LambdaLayerAggregation' :: LambdaLayerAggregation -> Maybe LambdaLayerSortBy
$sel:resourceIds:LambdaLayerAggregation' :: LambdaLayerAggregation -> Maybe (NonEmpty StringFilter)
$sel:layerArns:LambdaLayerAggregation' :: LambdaLayerAggregation -> Maybe (NonEmpty StringFilter)
$sel:functionNames:LambdaLayerAggregation' :: LambdaLayerAggregation -> Maybe (NonEmpty StringFilter)
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"functionNames" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe (NonEmpty StringFilter)
functionNames,
            (Key
"layerArns" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe (NonEmpty StringFilter)
layerArns,
            (Key
"resourceIds" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe (NonEmpty StringFilter)
resourceIds,
            (Key
"sortBy" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe LambdaLayerSortBy
sortBy,
            (Key
"sortOrder" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe SortOrder
sortOrder
          ]
      )