{-# 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.SSM.Types.ComplianceSummaryItem
-- 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.SSM.Types.ComplianceSummaryItem 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.SSM.Types.CompliantSummary
import Amazonka.SSM.Types.NonCompliantSummary

-- | A summary of compliance information by compliance type.
--
-- /See:/ 'newComplianceSummaryItem' smart constructor.
data ComplianceSummaryItem = ComplianceSummaryItem'
  { -- | The type of compliance item. For example, the compliance type can be
    -- Association, Patch, or Custom:string.
    ComplianceSummaryItem -> Maybe Text
complianceType :: Prelude.Maybe Prelude.Text,
    -- | A list of COMPLIANT items for the specified compliance type.
    ComplianceSummaryItem -> Maybe CompliantSummary
compliantSummary :: Prelude.Maybe CompliantSummary,
    -- | A list of NON_COMPLIANT items for the specified compliance type.
    ComplianceSummaryItem -> Maybe NonCompliantSummary
nonCompliantSummary :: Prelude.Maybe NonCompliantSummary
  }
  deriving (ComplianceSummaryItem -> ComplianceSummaryItem -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ComplianceSummaryItem -> ComplianceSummaryItem -> Bool
$c/= :: ComplianceSummaryItem -> ComplianceSummaryItem -> Bool
== :: ComplianceSummaryItem -> ComplianceSummaryItem -> Bool
$c== :: ComplianceSummaryItem -> ComplianceSummaryItem -> Bool
Prelude.Eq, ReadPrec [ComplianceSummaryItem]
ReadPrec ComplianceSummaryItem
Int -> ReadS ComplianceSummaryItem
ReadS [ComplianceSummaryItem]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ComplianceSummaryItem]
$creadListPrec :: ReadPrec [ComplianceSummaryItem]
readPrec :: ReadPrec ComplianceSummaryItem
$creadPrec :: ReadPrec ComplianceSummaryItem
readList :: ReadS [ComplianceSummaryItem]
$creadList :: ReadS [ComplianceSummaryItem]
readsPrec :: Int -> ReadS ComplianceSummaryItem
$creadsPrec :: Int -> ReadS ComplianceSummaryItem
Prelude.Read, Int -> ComplianceSummaryItem -> ShowS
[ComplianceSummaryItem] -> ShowS
ComplianceSummaryItem -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ComplianceSummaryItem] -> ShowS
$cshowList :: [ComplianceSummaryItem] -> ShowS
show :: ComplianceSummaryItem -> String
$cshow :: ComplianceSummaryItem -> String
showsPrec :: Int -> ComplianceSummaryItem -> ShowS
$cshowsPrec :: Int -> ComplianceSummaryItem -> ShowS
Prelude.Show, forall x. Rep ComplianceSummaryItem x -> ComplianceSummaryItem
forall x. ComplianceSummaryItem -> Rep ComplianceSummaryItem x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ComplianceSummaryItem x -> ComplianceSummaryItem
$cfrom :: forall x. ComplianceSummaryItem -> Rep ComplianceSummaryItem x
Prelude.Generic)

-- |
-- Create a value of 'ComplianceSummaryItem' 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:
--
-- 'complianceType', 'complianceSummaryItem_complianceType' - The type of compliance item. For example, the compliance type can be
-- Association, Patch, or Custom:string.
--
-- 'compliantSummary', 'complianceSummaryItem_compliantSummary' - A list of COMPLIANT items for the specified compliance type.
--
-- 'nonCompliantSummary', 'complianceSummaryItem_nonCompliantSummary' - A list of NON_COMPLIANT items for the specified compliance type.
newComplianceSummaryItem ::
  ComplianceSummaryItem
newComplianceSummaryItem :: ComplianceSummaryItem
newComplianceSummaryItem =
  ComplianceSummaryItem'
    { $sel:complianceType:ComplianceSummaryItem' :: Maybe Text
complianceType =
        forall a. Maybe a
Prelude.Nothing,
      $sel:compliantSummary:ComplianceSummaryItem' :: Maybe CompliantSummary
compliantSummary = forall a. Maybe a
Prelude.Nothing,
      $sel:nonCompliantSummary:ComplianceSummaryItem' :: Maybe NonCompliantSummary
nonCompliantSummary = forall a. Maybe a
Prelude.Nothing
    }

-- | The type of compliance item. For example, the compliance type can be
-- Association, Patch, or Custom:string.
complianceSummaryItem_complianceType :: Lens.Lens' ComplianceSummaryItem (Prelude.Maybe Prelude.Text)
complianceSummaryItem_complianceType :: Lens' ComplianceSummaryItem (Maybe Text)
complianceSummaryItem_complianceType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ComplianceSummaryItem' {Maybe Text
complianceType :: Maybe Text
$sel:complianceType:ComplianceSummaryItem' :: ComplianceSummaryItem -> Maybe Text
complianceType} -> Maybe Text
complianceType) (\s :: ComplianceSummaryItem
s@ComplianceSummaryItem' {} Maybe Text
a -> ComplianceSummaryItem
s {$sel:complianceType:ComplianceSummaryItem' :: Maybe Text
complianceType = Maybe Text
a} :: ComplianceSummaryItem)

-- | A list of COMPLIANT items for the specified compliance type.
complianceSummaryItem_compliantSummary :: Lens.Lens' ComplianceSummaryItem (Prelude.Maybe CompliantSummary)
complianceSummaryItem_compliantSummary :: Lens' ComplianceSummaryItem (Maybe CompliantSummary)
complianceSummaryItem_compliantSummary = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ComplianceSummaryItem' {Maybe CompliantSummary
compliantSummary :: Maybe CompliantSummary
$sel:compliantSummary:ComplianceSummaryItem' :: ComplianceSummaryItem -> Maybe CompliantSummary
compliantSummary} -> Maybe CompliantSummary
compliantSummary) (\s :: ComplianceSummaryItem
s@ComplianceSummaryItem' {} Maybe CompliantSummary
a -> ComplianceSummaryItem
s {$sel:compliantSummary:ComplianceSummaryItem' :: Maybe CompliantSummary
compliantSummary = Maybe CompliantSummary
a} :: ComplianceSummaryItem)

-- | A list of NON_COMPLIANT items for the specified compliance type.
complianceSummaryItem_nonCompliantSummary :: Lens.Lens' ComplianceSummaryItem (Prelude.Maybe NonCompliantSummary)
complianceSummaryItem_nonCompliantSummary :: Lens' ComplianceSummaryItem (Maybe NonCompliantSummary)
complianceSummaryItem_nonCompliantSummary = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ComplianceSummaryItem' {Maybe NonCompliantSummary
nonCompliantSummary :: Maybe NonCompliantSummary
$sel:nonCompliantSummary:ComplianceSummaryItem' :: ComplianceSummaryItem -> Maybe NonCompliantSummary
nonCompliantSummary} -> Maybe NonCompliantSummary
nonCompliantSummary) (\s :: ComplianceSummaryItem
s@ComplianceSummaryItem' {} Maybe NonCompliantSummary
a -> ComplianceSummaryItem
s {$sel:nonCompliantSummary:ComplianceSummaryItem' :: Maybe NonCompliantSummary
nonCompliantSummary = Maybe NonCompliantSummary
a} :: ComplianceSummaryItem)

instance Data.FromJSON ComplianceSummaryItem where
  parseJSON :: Value -> Parser ComplianceSummaryItem
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"ComplianceSummaryItem"
      ( \Object
x ->
          Maybe Text
-> Maybe CompliantSummary
-> Maybe NonCompliantSummary
-> ComplianceSummaryItem
ComplianceSummaryItem'
            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
"ComplianceType")
            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
"CompliantSummary")
            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
"NonCompliantSummary")
      )

instance Prelude.Hashable ComplianceSummaryItem where
  hashWithSalt :: Int -> ComplianceSummaryItem -> Int
hashWithSalt Int
_salt ComplianceSummaryItem' {Maybe Text
Maybe NonCompliantSummary
Maybe CompliantSummary
nonCompliantSummary :: Maybe NonCompliantSummary
compliantSummary :: Maybe CompliantSummary
complianceType :: Maybe Text
$sel:nonCompliantSummary:ComplianceSummaryItem' :: ComplianceSummaryItem -> Maybe NonCompliantSummary
$sel:compliantSummary:ComplianceSummaryItem' :: ComplianceSummaryItem -> Maybe CompliantSummary
$sel:complianceType:ComplianceSummaryItem' :: ComplianceSummaryItem -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
complianceType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe CompliantSummary
compliantSummary
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe NonCompliantSummary
nonCompliantSummary

instance Prelude.NFData ComplianceSummaryItem where
  rnf :: ComplianceSummaryItem -> ()
rnf ComplianceSummaryItem' {Maybe Text
Maybe NonCompliantSummary
Maybe CompliantSummary
nonCompliantSummary :: Maybe NonCompliantSummary
compliantSummary :: Maybe CompliantSummary
complianceType :: Maybe Text
$sel:nonCompliantSummary:ComplianceSummaryItem' :: ComplianceSummaryItem -> Maybe NonCompliantSummary
$sel:compliantSummary:ComplianceSummaryItem' :: ComplianceSummaryItem -> Maybe CompliantSummary
$sel:complianceType:ComplianceSummaryItem' :: ComplianceSummaryItem -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
complianceType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe CompliantSummary
compliantSummary
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe NonCompliantSummary
nonCompliantSummary