{-# 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.AuditManager.Types.AssessmentControlSet
-- 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.AuditManager.Types.AssessmentControlSet where

import Amazonka.AuditManager.Types.AssessmentControl
import Amazonka.AuditManager.Types.ControlSetStatus
import Amazonka.AuditManager.Types.Delegation
import Amazonka.AuditManager.Types.Role
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

-- | Represents a set of controls in an Audit Manager assessment.
--
-- /See:/ 'newAssessmentControlSet' smart constructor.
data AssessmentControlSet = AssessmentControlSet'
  { -- | The list of controls that\'s contained with the control set.
    AssessmentControlSet -> Maybe [AssessmentControl]
controls :: Prelude.Maybe [AssessmentControl],
    -- | The delegations that are associated with the control set.
    AssessmentControlSet -> Maybe [Delegation]
delegations :: Prelude.Maybe [Delegation],
    -- | The description for the control set.
    AssessmentControlSet -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | The identifier of the control set in the assessment. This is the control
    -- set name in a plain string format.
    AssessmentControlSet -> Maybe Text
id :: Prelude.Maybe Prelude.Text,
    -- | The total number of evidence objects that are uploaded manually to the
    -- control set.
    AssessmentControlSet -> Maybe Int
manualEvidenceCount :: Prelude.Maybe Prelude.Int,
    -- | The roles that are associated with the control set.
    AssessmentControlSet -> Maybe [Role]
roles :: Prelude.Maybe [Role],
    -- | The current status of the control set.
    AssessmentControlSet -> Maybe ControlSetStatus
status :: Prelude.Maybe ControlSetStatus,
    -- | The total number of evidence objects that are retrieved automatically
    -- for the control set.
    AssessmentControlSet -> Maybe Int
systemEvidenceCount :: Prelude.Maybe Prelude.Int
  }
  deriving (AssessmentControlSet -> AssessmentControlSet -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AssessmentControlSet -> AssessmentControlSet -> Bool
$c/= :: AssessmentControlSet -> AssessmentControlSet -> Bool
== :: AssessmentControlSet -> AssessmentControlSet -> Bool
$c== :: AssessmentControlSet -> AssessmentControlSet -> Bool
Prelude.Eq, ReadPrec [AssessmentControlSet]
ReadPrec AssessmentControlSet
Int -> ReadS AssessmentControlSet
ReadS [AssessmentControlSet]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [AssessmentControlSet]
$creadListPrec :: ReadPrec [AssessmentControlSet]
readPrec :: ReadPrec AssessmentControlSet
$creadPrec :: ReadPrec AssessmentControlSet
readList :: ReadS [AssessmentControlSet]
$creadList :: ReadS [AssessmentControlSet]
readsPrec :: Int -> ReadS AssessmentControlSet
$creadsPrec :: Int -> ReadS AssessmentControlSet
Prelude.Read, Int -> AssessmentControlSet -> ShowS
[AssessmentControlSet] -> ShowS
AssessmentControlSet -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AssessmentControlSet] -> ShowS
$cshowList :: [AssessmentControlSet] -> ShowS
show :: AssessmentControlSet -> String
$cshow :: AssessmentControlSet -> String
showsPrec :: Int -> AssessmentControlSet -> ShowS
$cshowsPrec :: Int -> AssessmentControlSet -> ShowS
Prelude.Show, forall x. Rep AssessmentControlSet x -> AssessmentControlSet
forall x. AssessmentControlSet -> Rep AssessmentControlSet x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep AssessmentControlSet x -> AssessmentControlSet
$cfrom :: forall x. AssessmentControlSet -> Rep AssessmentControlSet x
Prelude.Generic)

-- |
-- Create a value of 'AssessmentControlSet' 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:
--
-- 'controls', 'assessmentControlSet_controls' - The list of controls that\'s contained with the control set.
--
-- 'delegations', 'assessmentControlSet_delegations' - The delegations that are associated with the control set.
--
-- 'description', 'assessmentControlSet_description' - The description for the control set.
--
-- 'id', 'assessmentControlSet_id' - The identifier of the control set in the assessment. This is the control
-- set name in a plain string format.
--
-- 'manualEvidenceCount', 'assessmentControlSet_manualEvidenceCount' - The total number of evidence objects that are uploaded manually to the
-- control set.
--
-- 'roles', 'assessmentControlSet_roles' - The roles that are associated with the control set.
--
-- 'status', 'assessmentControlSet_status' - The current status of the control set.
--
-- 'systemEvidenceCount', 'assessmentControlSet_systemEvidenceCount' - The total number of evidence objects that are retrieved automatically
-- for the control set.
newAssessmentControlSet ::
  AssessmentControlSet
newAssessmentControlSet :: AssessmentControlSet
newAssessmentControlSet =
  AssessmentControlSet'
    { $sel:controls:AssessmentControlSet' :: Maybe [AssessmentControl]
controls = forall a. Maybe a
Prelude.Nothing,
      $sel:delegations:AssessmentControlSet' :: Maybe [Delegation]
delegations = forall a. Maybe a
Prelude.Nothing,
      $sel:description:AssessmentControlSet' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
      $sel:id:AssessmentControlSet' :: Maybe Text
id = forall a. Maybe a
Prelude.Nothing,
      $sel:manualEvidenceCount:AssessmentControlSet' :: Maybe Int
manualEvidenceCount = forall a. Maybe a
Prelude.Nothing,
      $sel:roles:AssessmentControlSet' :: Maybe [Role]
roles = forall a. Maybe a
Prelude.Nothing,
      $sel:status:AssessmentControlSet' :: Maybe ControlSetStatus
status = forall a. Maybe a
Prelude.Nothing,
      $sel:systemEvidenceCount:AssessmentControlSet' :: Maybe Int
systemEvidenceCount = forall a. Maybe a
Prelude.Nothing
    }

-- | The list of controls that\'s contained with the control set.
assessmentControlSet_controls :: Lens.Lens' AssessmentControlSet (Prelude.Maybe [AssessmentControl])
assessmentControlSet_controls :: Lens' AssessmentControlSet (Maybe [AssessmentControl])
assessmentControlSet_controls = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentControlSet' {Maybe [AssessmentControl]
controls :: Maybe [AssessmentControl]
$sel:controls:AssessmentControlSet' :: AssessmentControlSet -> Maybe [AssessmentControl]
controls} -> Maybe [AssessmentControl]
controls) (\s :: AssessmentControlSet
s@AssessmentControlSet' {} Maybe [AssessmentControl]
a -> AssessmentControlSet
s {$sel:controls:AssessmentControlSet' :: Maybe [AssessmentControl]
controls = Maybe [AssessmentControl]
a} :: AssessmentControlSet) 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 delegations that are associated with the control set.
assessmentControlSet_delegations :: Lens.Lens' AssessmentControlSet (Prelude.Maybe [Delegation])
assessmentControlSet_delegations :: Lens' AssessmentControlSet (Maybe [Delegation])
assessmentControlSet_delegations = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentControlSet' {Maybe [Delegation]
delegations :: Maybe [Delegation]
$sel:delegations:AssessmentControlSet' :: AssessmentControlSet -> Maybe [Delegation]
delegations} -> Maybe [Delegation]
delegations) (\s :: AssessmentControlSet
s@AssessmentControlSet' {} Maybe [Delegation]
a -> AssessmentControlSet
s {$sel:delegations:AssessmentControlSet' :: Maybe [Delegation]
delegations = Maybe [Delegation]
a} :: AssessmentControlSet) 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 description for the control set.
assessmentControlSet_description :: Lens.Lens' AssessmentControlSet (Prelude.Maybe Prelude.Text)
assessmentControlSet_description :: Lens' AssessmentControlSet (Maybe Text)
assessmentControlSet_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentControlSet' {Maybe Text
description :: Maybe Text
$sel:description:AssessmentControlSet' :: AssessmentControlSet -> Maybe Text
description} -> Maybe Text
description) (\s :: AssessmentControlSet
s@AssessmentControlSet' {} Maybe Text
a -> AssessmentControlSet
s {$sel:description:AssessmentControlSet' :: Maybe Text
description = Maybe Text
a} :: AssessmentControlSet)

-- | The identifier of the control set in the assessment. This is the control
-- set name in a plain string format.
assessmentControlSet_id :: Lens.Lens' AssessmentControlSet (Prelude.Maybe Prelude.Text)
assessmentControlSet_id :: Lens' AssessmentControlSet (Maybe Text)
assessmentControlSet_id = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentControlSet' {Maybe Text
id :: Maybe Text
$sel:id:AssessmentControlSet' :: AssessmentControlSet -> Maybe Text
id} -> Maybe Text
id) (\s :: AssessmentControlSet
s@AssessmentControlSet' {} Maybe Text
a -> AssessmentControlSet
s {$sel:id:AssessmentControlSet' :: Maybe Text
id = Maybe Text
a} :: AssessmentControlSet)

-- | The total number of evidence objects that are uploaded manually to the
-- control set.
assessmentControlSet_manualEvidenceCount :: Lens.Lens' AssessmentControlSet (Prelude.Maybe Prelude.Int)
assessmentControlSet_manualEvidenceCount :: Lens' AssessmentControlSet (Maybe Int)
assessmentControlSet_manualEvidenceCount = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentControlSet' {Maybe Int
manualEvidenceCount :: Maybe Int
$sel:manualEvidenceCount:AssessmentControlSet' :: AssessmentControlSet -> Maybe Int
manualEvidenceCount} -> Maybe Int
manualEvidenceCount) (\s :: AssessmentControlSet
s@AssessmentControlSet' {} Maybe Int
a -> AssessmentControlSet
s {$sel:manualEvidenceCount:AssessmentControlSet' :: Maybe Int
manualEvidenceCount = Maybe Int
a} :: AssessmentControlSet)

-- | The roles that are associated with the control set.
assessmentControlSet_roles :: Lens.Lens' AssessmentControlSet (Prelude.Maybe [Role])
assessmentControlSet_roles :: Lens' AssessmentControlSet (Maybe [Role])
assessmentControlSet_roles = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentControlSet' {Maybe [Role]
roles :: Maybe [Role]
$sel:roles:AssessmentControlSet' :: AssessmentControlSet -> Maybe [Role]
roles} -> Maybe [Role]
roles) (\s :: AssessmentControlSet
s@AssessmentControlSet' {} Maybe [Role]
a -> AssessmentControlSet
s {$sel:roles:AssessmentControlSet' :: Maybe [Role]
roles = Maybe [Role]
a} :: AssessmentControlSet) 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 current status of the control set.
assessmentControlSet_status :: Lens.Lens' AssessmentControlSet (Prelude.Maybe ControlSetStatus)
assessmentControlSet_status :: Lens' AssessmentControlSet (Maybe ControlSetStatus)
assessmentControlSet_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentControlSet' {Maybe ControlSetStatus
status :: Maybe ControlSetStatus
$sel:status:AssessmentControlSet' :: AssessmentControlSet -> Maybe ControlSetStatus
status} -> Maybe ControlSetStatus
status) (\s :: AssessmentControlSet
s@AssessmentControlSet' {} Maybe ControlSetStatus
a -> AssessmentControlSet
s {$sel:status:AssessmentControlSet' :: Maybe ControlSetStatus
status = Maybe ControlSetStatus
a} :: AssessmentControlSet)

-- | The total number of evidence objects that are retrieved automatically
-- for the control set.
assessmentControlSet_systemEvidenceCount :: Lens.Lens' AssessmentControlSet (Prelude.Maybe Prelude.Int)
assessmentControlSet_systemEvidenceCount :: Lens' AssessmentControlSet (Maybe Int)
assessmentControlSet_systemEvidenceCount = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentControlSet' {Maybe Int
systemEvidenceCount :: Maybe Int
$sel:systemEvidenceCount:AssessmentControlSet' :: AssessmentControlSet -> Maybe Int
systemEvidenceCount} -> Maybe Int
systemEvidenceCount) (\s :: AssessmentControlSet
s@AssessmentControlSet' {} Maybe Int
a -> AssessmentControlSet
s {$sel:systemEvidenceCount:AssessmentControlSet' :: Maybe Int
systemEvidenceCount = Maybe Int
a} :: AssessmentControlSet)

instance Data.FromJSON AssessmentControlSet where
  parseJSON :: Value -> Parser AssessmentControlSet
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"AssessmentControlSet"
      ( \Object
x ->
          Maybe [AssessmentControl]
-> Maybe [Delegation]
-> Maybe Text
-> Maybe Text
-> Maybe Int
-> Maybe [Role]
-> Maybe ControlSetStatus
-> Maybe Int
-> AssessmentControlSet
AssessmentControlSet'
            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
"controls" forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty)
            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
"delegations" forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty)
            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
"description")
            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
"id")
            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
"manualEvidenceCount")
            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
"roles" forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty)
            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
"status")
            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
"systemEvidenceCount")
      )

instance Prelude.Hashable AssessmentControlSet where
  hashWithSalt :: Int -> AssessmentControlSet -> Int
hashWithSalt Int
_salt AssessmentControlSet' {Maybe Int
Maybe [AssessmentControl]
Maybe [Role]
Maybe [Delegation]
Maybe Text
Maybe ControlSetStatus
systemEvidenceCount :: Maybe Int
status :: Maybe ControlSetStatus
roles :: Maybe [Role]
manualEvidenceCount :: Maybe Int
id :: Maybe Text
description :: Maybe Text
delegations :: Maybe [Delegation]
controls :: Maybe [AssessmentControl]
$sel:systemEvidenceCount:AssessmentControlSet' :: AssessmentControlSet -> Maybe Int
$sel:status:AssessmentControlSet' :: AssessmentControlSet -> Maybe ControlSetStatus
$sel:roles:AssessmentControlSet' :: AssessmentControlSet -> Maybe [Role]
$sel:manualEvidenceCount:AssessmentControlSet' :: AssessmentControlSet -> Maybe Int
$sel:id:AssessmentControlSet' :: AssessmentControlSet -> Maybe Text
$sel:description:AssessmentControlSet' :: AssessmentControlSet -> Maybe Text
$sel:delegations:AssessmentControlSet' :: AssessmentControlSet -> Maybe [Delegation]
$sel:controls:AssessmentControlSet' :: AssessmentControlSet -> Maybe [AssessmentControl]
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [AssessmentControl]
controls
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Delegation]
delegations
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
id
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
manualEvidenceCount
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Role]
roles
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ControlSetStatus
status
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
systemEvidenceCount

instance Prelude.NFData AssessmentControlSet where
  rnf :: AssessmentControlSet -> ()
rnf AssessmentControlSet' {Maybe Int
Maybe [AssessmentControl]
Maybe [Role]
Maybe [Delegation]
Maybe Text
Maybe ControlSetStatus
systemEvidenceCount :: Maybe Int
status :: Maybe ControlSetStatus
roles :: Maybe [Role]
manualEvidenceCount :: Maybe Int
id :: Maybe Text
description :: Maybe Text
delegations :: Maybe [Delegation]
controls :: Maybe [AssessmentControl]
$sel:systemEvidenceCount:AssessmentControlSet' :: AssessmentControlSet -> Maybe Int
$sel:status:AssessmentControlSet' :: AssessmentControlSet -> Maybe ControlSetStatus
$sel:roles:AssessmentControlSet' :: AssessmentControlSet -> Maybe [Role]
$sel:manualEvidenceCount:AssessmentControlSet' :: AssessmentControlSet -> Maybe Int
$sel:id:AssessmentControlSet' :: AssessmentControlSet -> Maybe Text
$sel:description:AssessmentControlSet' :: AssessmentControlSet -> Maybe Text
$sel:delegations:AssessmentControlSet' :: AssessmentControlSet -> Maybe [Delegation]
$sel:controls:AssessmentControlSet' :: AssessmentControlSet -> Maybe [AssessmentControl]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [AssessmentControl]
controls
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Delegation]
delegations
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
description
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
id
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
manualEvidenceCount
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Role]
roles
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ControlSetStatus
status
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
systemEvidenceCount