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

-- | The details that define an aggregation based on container image layers.
--
-- /See:/ 'newImageLayerAggregation' smart constructor.
data ImageLayerAggregation = ImageLayerAggregation'
  { -- | The hashes associated with the layers.
    ImageLayerAggregation -> Maybe (NonEmpty StringFilter)
layerHashes :: Prelude.Maybe (Prelude.NonEmpty StringFilter),
    -- | The repository associated with the container image hosting the layers.
    ImageLayerAggregation -> Maybe (NonEmpty StringFilter)
repositories :: Prelude.Maybe (Prelude.NonEmpty StringFilter),
    -- | The ID of the container image layer.
    ImageLayerAggregation -> Maybe (NonEmpty StringFilter)
resourceIds :: Prelude.Maybe (Prelude.NonEmpty StringFilter),
    -- | The value to sort results by.
    ImageLayerAggregation -> Maybe ImageLayerSortBy
sortBy :: Prelude.Maybe ImageLayerSortBy,
    -- | The order to sort results by.
    ImageLayerAggregation -> Maybe SortOrder
sortOrder :: Prelude.Maybe SortOrder
  }
  deriving (ImageLayerAggregation -> ImageLayerAggregation -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ImageLayerAggregation -> ImageLayerAggregation -> Bool
$c/= :: ImageLayerAggregation -> ImageLayerAggregation -> Bool
== :: ImageLayerAggregation -> ImageLayerAggregation -> Bool
$c== :: ImageLayerAggregation -> ImageLayerAggregation -> Bool
Prelude.Eq, ReadPrec [ImageLayerAggregation]
ReadPrec ImageLayerAggregation
Int -> ReadS ImageLayerAggregation
ReadS [ImageLayerAggregation]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ImageLayerAggregation]
$creadListPrec :: ReadPrec [ImageLayerAggregation]
readPrec :: ReadPrec ImageLayerAggregation
$creadPrec :: ReadPrec ImageLayerAggregation
readList :: ReadS [ImageLayerAggregation]
$creadList :: ReadS [ImageLayerAggregation]
readsPrec :: Int -> ReadS ImageLayerAggregation
$creadsPrec :: Int -> ReadS ImageLayerAggregation
Prelude.Read, Int -> ImageLayerAggregation -> ShowS
[ImageLayerAggregation] -> ShowS
ImageLayerAggregation -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ImageLayerAggregation] -> ShowS
$cshowList :: [ImageLayerAggregation] -> ShowS
show :: ImageLayerAggregation -> String
$cshow :: ImageLayerAggregation -> String
showsPrec :: Int -> ImageLayerAggregation -> ShowS
$cshowsPrec :: Int -> ImageLayerAggregation -> ShowS
Prelude.Show, forall x. Rep ImageLayerAggregation x -> ImageLayerAggregation
forall x. ImageLayerAggregation -> Rep ImageLayerAggregation x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ImageLayerAggregation x -> ImageLayerAggregation
$cfrom :: forall x. ImageLayerAggregation -> Rep ImageLayerAggregation x
Prelude.Generic)

-- |
-- Create a value of 'ImageLayerAggregation' 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:
--
-- 'layerHashes', 'imageLayerAggregation_layerHashes' - The hashes associated with the layers.
--
-- 'repositories', 'imageLayerAggregation_repositories' - The repository associated with the container image hosting the layers.
--
-- 'resourceIds', 'imageLayerAggregation_resourceIds' - The ID of the container image layer.
--
-- 'sortBy', 'imageLayerAggregation_sortBy' - The value to sort results by.
--
-- 'sortOrder', 'imageLayerAggregation_sortOrder' - The order to sort results by.
newImageLayerAggregation ::
  ImageLayerAggregation
newImageLayerAggregation :: ImageLayerAggregation
newImageLayerAggregation =
  ImageLayerAggregation'
    { $sel:layerHashes:ImageLayerAggregation' :: Maybe (NonEmpty StringFilter)
layerHashes =
        forall a. Maybe a
Prelude.Nothing,
      $sel:repositories:ImageLayerAggregation' :: Maybe (NonEmpty StringFilter)
repositories = forall a. Maybe a
Prelude.Nothing,
      $sel:resourceIds:ImageLayerAggregation' :: Maybe (NonEmpty StringFilter)
resourceIds = forall a. Maybe a
Prelude.Nothing,
      $sel:sortBy:ImageLayerAggregation' :: Maybe ImageLayerSortBy
sortBy = forall a. Maybe a
Prelude.Nothing,
      $sel:sortOrder:ImageLayerAggregation' :: Maybe SortOrder
sortOrder = forall a. Maybe a
Prelude.Nothing
    }

-- | The hashes associated with the layers.
imageLayerAggregation_layerHashes :: Lens.Lens' ImageLayerAggregation (Prelude.Maybe (Prelude.NonEmpty StringFilter))
imageLayerAggregation_layerHashes :: Lens' ImageLayerAggregation (Maybe (NonEmpty StringFilter))
imageLayerAggregation_layerHashes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ImageLayerAggregation' {Maybe (NonEmpty StringFilter)
layerHashes :: Maybe (NonEmpty StringFilter)
$sel:layerHashes:ImageLayerAggregation' :: ImageLayerAggregation -> Maybe (NonEmpty StringFilter)
layerHashes} -> Maybe (NonEmpty StringFilter)
layerHashes) (\s :: ImageLayerAggregation
s@ImageLayerAggregation' {} Maybe (NonEmpty StringFilter)
a -> ImageLayerAggregation
s {$sel:layerHashes:ImageLayerAggregation' :: Maybe (NonEmpty StringFilter)
layerHashes = Maybe (NonEmpty StringFilter)
a} :: ImageLayerAggregation) 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 repository associated with the container image hosting the layers.
imageLayerAggregation_repositories :: Lens.Lens' ImageLayerAggregation (Prelude.Maybe (Prelude.NonEmpty StringFilter))
imageLayerAggregation_repositories :: Lens' ImageLayerAggregation (Maybe (NonEmpty StringFilter))
imageLayerAggregation_repositories = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ImageLayerAggregation' {Maybe (NonEmpty StringFilter)
repositories :: Maybe (NonEmpty StringFilter)
$sel:repositories:ImageLayerAggregation' :: ImageLayerAggregation -> Maybe (NonEmpty StringFilter)
repositories} -> Maybe (NonEmpty StringFilter)
repositories) (\s :: ImageLayerAggregation
s@ImageLayerAggregation' {} Maybe (NonEmpty StringFilter)
a -> ImageLayerAggregation
s {$sel:repositories:ImageLayerAggregation' :: Maybe (NonEmpty StringFilter)
repositories = Maybe (NonEmpty StringFilter)
a} :: ImageLayerAggregation) 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 ID of the container image layer.
imageLayerAggregation_resourceIds :: Lens.Lens' ImageLayerAggregation (Prelude.Maybe (Prelude.NonEmpty StringFilter))
imageLayerAggregation_resourceIds :: Lens' ImageLayerAggregation (Maybe (NonEmpty StringFilter))
imageLayerAggregation_resourceIds = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ImageLayerAggregation' {Maybe (NonEmpty StringFilter)
resourceIds :: Maybe (NonEmpty StringFilter)
$sel:resourceIds:ImageLayerAggregation' :: ImageLayerAggregation -> Maybe (NonEmpty StringFilter)
resourceIds} -> Maybe (NonEmpty StringFilter)
resourceIds) (\s :: ImageLayerAggregation
s@ImageLayerAggregation' {} Maybe (NonEmpty StringFilter)
a -> ImageLayerAggregation
s {$sel:resourceIds:ImageLayerAggregation' :: Maybe (NonEmpty StringFilter)
resourceIds = Maybe (NonEmpty StringFilter)
a} :: ImageLayerAggregation) 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 value to sort results by.
imageLayerAggregation_sortBy :: Lens.Lens' ImageLayerAggregation (Prelude.Maybe ImageLayerSortBy)
imageLayerAggregation_sortBy :: Lens' ImageLayerAggregation (Maybe ImageLayerSortBy)
imageLayerAggregation_sortBy = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ImageLayerAggregation' {Maybe ImageLayerSortBy
sortBy :: Maybe ImageLayerSortBy
$sel:sortBy:ImageLayerAggregation' :: ImageLayerAggregation -> Maybe ImageLayerSortBy
sortBy} -> Maybe ImageLayerSortBy
sortBy) (\s :: ImageLayerAggregation
s@ImageLayerAggregation' {} Maybe ImageLayerSortBy
a -> ImageLayerAggregation
s {$sel:sortBy:ImageLayerAggregation' :: Maybe ImageLayerSortBy
sortBy = Maybe ImageLayerSortBy
a} :: ImageLayerAggregation)

-- | The order to sort results by.
imageLayerAggregation_sortOrder :: Lens.Lens' ImageLayerAggregation (Prelude.Maybe SortOrder)
imageLayerAggregation_sortOrder :: Lens' ImageLayerAggregation (Maybe SortOrder)
imageLayerAggregation_sortOrder = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ImageLayerAggregation' {Maybe SortOrder
sortOrder :: Maybe SortOrder
$sel:sortOrder:ImageLayerAggregation' :: ImageLayerAggregation -> Maybe SortOrder
sortOrder} -> Maybe SortOrder
sortOrder) (\s :: ImageLayerAggregation
s@ImageLayerAggregation' {} Maybe SortOrder
a -> ImageLayerAggregation
s {$sel:sortOrder:ImageLayerAggregation' :: Maybe SortOrder
sortOrder = Maybe SortOrder
a} :: ImageLayerAggregation)

instance Prelude.Hashable ImageLayerAggregation where
  hashWithSalt :: Int -> ImageLayerAggregation -> Int
hashWithSalt Int
_salt ImageLayerAggregation' {Maybe (NonEmpty StringFilter)
Maybe ImageLayerSortBy
Maybe SortOrder
sortOrder :: Maybe SortOrder
sortBy :: Maybe ImageLayerSortBy
resourceIds :: Maybe (NonEmpty StringFilter)
repositories :: Maybe (NonEmpty StringFilter)
layerHashes :: Maybe (NonEmpty StringFilter)
$sel:sortOrder:ImageLayerAggregation' :: ImageLayerAggregation -> Maybe SortOrder
$sel:sortBy:ImageLayerAggregation' :: ImageLayerAggregation -> Maybe ImageLayerSortBy
$sel:resourceIds:ImageLayerAggregation' :: ImageLayerAggregation -> Maybe (NonEmpty StringFilter)
$sel:repositories:ImageLayerAggregation' :: ImageLayerAggregation -> Maybe (NonEmpty StringFilter)
$sel:layerHashes:ImageLayerAggregation' :: ImageLayerAggregation -> Maybe (NonEmpty StringFilter)
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (NonEmpty StringFilter)
layerHashes
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (NonEmpty StringFilter)
repositories
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (NonEmpty StringFilter)
resourceIds
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ImageLayerSortBy
sortBy
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe SortOrder
sortOrder

instance Prelude.NFData ImageLayerAggregation where
  rnf :: ImageLayerAggregation -> ()
rnf ImageLayerAggregation' {Maybe (NonEmpty StringFilter)
Maybe ImageLayerSortBy
Maybe SortOrder
sortOrder :: Maybe SortOrder
sortBy :: Maybe ImageLayerSortBy
resourceIds :: Maybe (NonEmpty StringFilter)
repositories :: Maybe (NonEmpty StringFilter)
layerHashes :: Maybe (NonEmpty StringFilter)
$sel:sortOrder:ImageLayerAggregation' :: ImageLayerAggregation -> Maybe SortOrder
$sel:sortBy:ImageLayerAggregation' :: ImageLayerAggregation -> Maybe ImageLayerSortBy
$sel:resourceIds:ImageLayerAggregation' :: ImageLayerAggregation -> Maybe (NonEmpty StringFilter)
$sel:repositories:ImageLayerAggregation' :: ImageLayerAggregation -> Maybe (NonEmpty StringFilter)
$sel:layerHashes:ImageLayerAggregation' :: ImageLayerAggregation -> Maybe (NonEmpty StringFilter)
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe (NonEmpty StringFilter)
layerHashes
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (NonEmpty StringFilter)
repositories
      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 ImageLayerSortBy
sortBy
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe SortOrder
sortOrder

instance Data.ToJSON ImageLayerAggregation where
  toJSON :: ImageLayerAggregation -> Value
toJSON ImageLayerAggregation' {Maybe (NonEmpty StringFilter)
Maybe ImageLayerSortBy
Maybe SortOrder
sortOrder :: Maybe SortOrder
sortBy :: Maybe ImageLayerSortBy
resourceIds :: Maybe (NonEmpty StringFilter)
repositories :: Maybe (NonEmpty StringFilter)
layerHashes :: Maybe (NonEmpty StringFilter)
$sel:sortOrder:ImageLayerAggregation' :: ImageLayerAggregation -> Maybe SortOrder
$sel:sortBy:ImageLayerAggregation' :: ImageLayerAggregation -> Maybe ImageLayerSortBy
$sel:resourceIds:ImageLayerAggregation' :: ImageLayerAggregation -> Maybe (NonEmpty StringFilter)
$sel:repositories:ImageLayerAggregation' :: ImageLayerAggregation -> Maybe (NonEmpty StringFilter)
$sel:layerHashes:ImageLayerAggregation' :: ImageLayerAggregation -> Maybe (NonEmpty StringFilter)
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"layerHashes" 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)
layerHashes,
            (Key
"repositories" 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)
repositories,
            (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 ImageLayerSortBy
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
          ]
      )