{-# 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.AssessmentControl
-- 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.AssessmentControl where

import Amazonka.AuditManager.Types.ControlComment
import Amazonka.AuditManager.Types.ControlResponse
import Amazonka.AuditManager.Types.ControlStatus
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

-- | The control entity that represents a standard control or a custom
-- control in an Audit Manager assessment.
--
-- /See:/ 'newAssessmentControl' smart constructor.
data AssessmentControl = AssessmentControl'
  { -- | The amount of evidence in the assessment report.
    AssessmentControl -> Maybe Int
assessmentReportEvidenceCount :: Prelude.Maybe Prelude.Int,
    -- | The list of comments that\'s attached to the control.
    AssessmentControl -> Maybe [ControlComment]
comments :: Prelude.Maybe [ControlComment],
    -- | The description of the control.
    AssessmentControl -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | The amount of evidence that\'s collected for the control.
    AssessmentControl -> Maybe Int
evidenceCount :: Prelude.Maybe Prelude.Int,
    -- | The list of data sources for the evidence.
    AssessmentControl -> Maybe [Text]
evidenceSources :: Prelude.Maybe [Prelude.Text],
    -- | The identifier for the control.
    AssessmentControl -> Maybe Text
id :: Prelude.Maybe Prelude.Text,
    -- | The name of the control.
    AssessmentControl -> Maybe Text
name :: Prelude.Maybe Prelude.Text,
    -- | The response of the control.
    AssessmentControl -> Maybe ControlResponse
response :: Prelude.Maybe ControlResponse,
    -- | The status of the control.
    AssessmentControl -> Maybe ControlStatus
status :: Prelude.Maybe ControlStatus
  }
  deriving (AssessmentControl -> AssessmentControl -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AssessmentControl -> AssessmentControl -> Bool
$c/= :: AssessmentControl -> AssessmentControl -> Bool
== :: AssessmentControl -> AssessmentControl -> Bool
$c== :: AssessmentControl -> AssessmentControl -> Bool
Prelude.Eq, ReadPrec [AssessmentControl]
ReadPrec AssessmentControl
Int -> ReadS AssessmentControl
ReadS [AssessmentControl]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [AssessmentControl]
$creadListPrec :: ReadPrec [AssessmentControl]
readPrec :: ReadPrec AssessmentControl
$creadPrec :: ReadPrec AssessmentControl
readList :: ReadS [AssessmentControl]
$creadList :: ReadS [AssessmentControl]
readsPrec :: Int -> ReadS AssessmentControl
$creadsPrec :: Int -> ReadS AssessmentControl
Prelude.Read, Int -> AssessmentControl -> ShowS
[AssessmentControl] -> ShowS
AssessmentControl -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AssessmentControl] -> ShowS
$cshowList :: [AssessmentControl] -> ShowS
show :: AssessmentControl -> String
$cshow :: AssessmentControl -> String
showsPrec :: Int -> AssessmentControl -> ShowS
$cshowsPrec :: Int -> AssessmentControl -> ShowS
Prelude.Show, forall x. Rep AssessmentControl x -> AssessmentControl
forall x. AssessmentControl -> Rep AssessmentControl x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep AssessmentControl x -> AssessmentControl
$cfrom :: forall x. AssessmentControl -> Rep AssessmentControl x
Prelude.Generic)

-- |
-- Create a value of 'AssessmentControl' 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:
--
-- 'assessmentReportEvidenceCount', 'assessmentControl_assessmentReportEvidenceCount' - The amount of evidence in the assessment report.
--
-- 'comments', 'assessmentControl_comments' - The list of comments that\'s attached to the control.
--
-- 'description', 'assessmentControl_description' - The description of the control.
--
-- 'evidenceCount', 'assessmentControl_evidenceCount' - The amount of evidence that\'s collected for the control.
--
-- 'evidenceSources', 'assessmentControl_evidenceSources' - The list of data sources for the evidence.
--
-- 'id', 'assessmentControl_id' - The identifier for the control.
--
-- 'name', 'assessmentControl_name' - The name of the control.
--
-- 'response', 'assessmentControl_response' - The response of the control.
--
-- 'status', 'assessmentControl_status' - The status of the control.
newAssessmentControl ::
  AssessmentControl
newAssessmentControl :: AssessmentControl
newAssessmentControl =
  AssessmentControl'
    { $sel:assessmentReportEvidenceCount:AssessmentControl' :: Maybe Int
assessmentReportEvidenceCount =
        forall a. Maybe a
Prelude.Nothing,
      $sel:comments:AssessmentControl' :: Maybe [ControlComment]
comments = forall a. Maybe a
Prelude.Nothing,
      $sel:description:AssessmentControl' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
      $sel:evidenceCount:AssessmentControl' :: Maybe Int
evidenceCount = forall a. Maybe a
Prelude.Nothing,
      $sel:evidenceSources:AssessmentControl' :: Maybe [Text]
evidenceSources = forall a. Maybe a
Prelude.Nothing,
      $sel:id:AssessmentControl' :: Maybe Text
id = forall a. Maybe a
Prelude.Nothing,
      $sel:name:AssessmentControl' :: Maybe Text
name = forall a. Maybe a
Prelude.Nothing,
      $sel:response:AssessmentControl' :: Maybe ControlResponse
response = forall a. Maybe a
Prelude.Nothing,
      $sel:status:AssessmentControl' :: Maybe ControlStatus
status = forall a. Maybe a
Prelude.Nothing
    }

-- | The amount of evidence in the assessment report.
assessmentControl_assessmentReportEvidenceCount :: Lens.Lens' AssessmentControl (Prelude.Maybe Prelude.Int)
assessmentControl_assessmentReportEvidenceCount :: Lens' AssessmentControl (Maybe Int)
assessmentControl_assessmentReportEvidenceCount = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentControl' {Maybe Int
assessmentReportEvidenceCount :: Maybe Int
$sel:assessmentReportEvidenceCount:AssessmentControl' :: AssessmentControl -> Maybe Int
assessmentReportEvidenceCount} -> Maybe Int
assessmentReportEvidenceCount) (\s :: AssessmentControl
s@AssessmentControl' {} Maybe Int
a -> AssessmentControl
s {$sel:assessmentReportEvidenceCount:AssessmentControl' :: Maybe Int
assessmentReportEvidenceCount = Maybe Int
a} :: AssessmentControl)

-- | The list of comments that\'s attached to the control.
assessmentControl_comments :: Lens.Lens' AssessmentControl (Prelude.Maybe [ControlComment])
assessmentControl_comments :: Lens' AssessmentControl (Maybe [ControlComment])
assessmentControl_comments = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentControl' {Maybe [ControlComment]
comments :: Maybe [ControlComment]
$sel:comments:AssessmentControl' :: AssessmentControl -> Maybe [ControlComment]
comments} -> Maybe [ControlComment]
comments) (\s :: AssessmentControl
s@AssessmentControl' {} Maybe [ControlComment]
a -> AssessmentControl
s {$sel:comments:AssessmentControl' :: Maybe [ControlComment]
comments = Maybe [ControlComment]
a} :: AssessmentControl) 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 of the control.
assessmentControl_description :: Lens.Lens' AssessmentControl (Prelude.Maybe Prelude.Text)
assessmentControl_description :: Lens' AssessmentControl (Maybe Text)
assessmentControl_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentControl' {Maybe Text
description :: Maybe Text
$sel:description:AssessmentControl' :: AssessmentControl -> Maybe Text
description} -> Maybe Text
description) (\s :: AssessmentControl
s@AssessmentControl' {} Maybe Text
a -> AssessmentControl
s {$sel:description:AssessmentControl' :: Maybe Text
description = Maybe Text
a} :: AssessmentControl)

-- | The amount of evidence that\'s collected for the control.
assessmentControl_evidenceCount :: Lens.Lens' AssessmentControl (Prelude.Maybe Prelude.Int)
assessmentControl_evidenceCount :: Lens' AssessmentControl (Maybe Int)
assessmentControl_evidenceCount = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentControl' {Maybe Int
evidenceCount :: Maybe Int
$sel:evidenceCount:AssessmentControl' :: AssessmentControl -> Maybe Int
evidenceCount} -> Maybe Int
evidenceCount) (\s :: AssessmentControl
s@AssessmentControl' {} Maybe Int
a -> AssessmentControl
s {$sel:evidenceCount:AssessmentControl' :: Maybe Int
evidenceCount = Maybe Int
a} :: AssessmentControl)

-- | The list of data sources for the evidence.
assessmentControl_evidenceSources :: Lens.Lens' AssessmentControl (Prelude.Maybe [Prelude.Text])
assessmentControl_evidenceSources :: Lens' AssessmentControl (Maybe [Text])
assessmentControl_evidenceSources = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentControl' {Maybe [Text]
evidenceSources :: Maybe [Text]
$sel:evidenceSources:AssessmentControl' :: AssessmentControl -> Maybe [Text]
evidenceSources} -> Maybe [Text]
evidenceSources) (\s :: AssessmentControl
s@AssessmentControl' {} Maybe [Text]
a -> AssessmentControl
s {$sel:evidenceSources:AssessmentControl' :: Maybe [Text]
evidenceSources = Maybe [Text]
a} :: AssessmentControl) 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 identifier for the control.
assessmentControl_id :: Lens.Lens' AssessmentControl (Prelude.Maybe Prelude.Text)
assessmentControl_id :: Lens' AssessmentControl (Maybe Text)
assessmentControl_id = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentControl' {Maybe Text
id :: Maybe Text
$sel:id:AssessmentControl' :: AssessmentControl -> Maybe Text
id} -> Maybe Text
id) (\s :: AssessmentControl
s@AssessmentControl' {} Maybe Text
a -> AssessmentControl
s {$sel:id:AssessmentControl' :: Maybe Text
id = Maybe Text
a} :: AssessmentControl)

-- | The name of the control.
assessmentControl_name :: Lens.Lens' AssessmentControl (Prelude.Maybe Prelude.Text)
assessmentControl_name :: Lens' AssessmentControl (Maybe Text)
assessmentControl_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentControl' {Maybe Text
name :: Maybe Text
$sel:name:AssessmentControl' :: AssessmentControl -> Maybe Text
name} -> Maybe Text
name) (\s :: AssessmentControl
s@AssessmentControl' {} Maybe Text
a -> AssessmentControl
s {$sel:name:AssessmentControl' :: Maybe Text
name = Maybe Text
a} :: AssessmentControl)

-- | The response of the control.
assessmentControl_response :: Lens.Lens' AssessmentControl (Prelude.Maybe ControlResponse)
assessmentControl_response :: Lens' AssessmentControl (Maybe ControlResponse)
assessmentControl_response = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentControl' {Maybe ControlResponse
response :: Maybe ControlResponse
$sel:response:AssessmentControl' :: AssessmentControl -> Maybe ControlResponse
response} -> Maybe ControlResponse
response) (\s :: AssessmentControl
s@AssessmentControl' {} Maybe ControlResponse
a -> AssessmentControl
s {$sel:response:AssessmentControl' :: Maybe ControlResponse
response = Maybe ControlResponse
a} :: AssessmentControl)

-- | The status of the control.
assessmentControl_status :: Lens.Lens' AssessmentControl (Prelude.Maybe ControlStatus)
assessmentControl_status :: Lens' AssessmentControl (Maybe ControlStatus)
assessmentControl_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentControl' {Maybe ControlStatus
status :: Maybe ControlStatus
$sel:status:AssessmentControl' :: AssessmentControl -> Maybe ControlStatus
status} -> Maybe ControlStatus
status) (\s :: AssessmentControl
s@AssessmentControl' {} Maybe ControlStatus
a -> AssessmentControl
s {$sel:status:AssessmentControl' :: Maybe ControlStatus
status = Maybe ControlStatus
a} :: AssessmentControl)

instance Data.FromJSON AssessmentControl where
  parseJSON :: Value -> Parser AssessmentControl
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"AssessmentControl"
      ( \Object
x ->
          Maybe Int
-> Maybe [ControlComment]
-> Maybe Text
-> Maybe Int
-> Maybe [Text]
-> Maybe Text
-> Maybe Text
-> Maybe ControlResponse
-> Maybe ControlStatus
-> AssessmentControl
AssessmentControl'
            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
"assessmentReportEvidenceCount")
            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
"comments" 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
"evidenceCount")
            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
"evidenceSources"
                            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
"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
"name")
            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
"response")
            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")
      )

instance Prelude.Hashable AssessmentControl where
  hashWithSalt :: Int -> AssessmentControl -> Int
hashWithSalt Int
_salt AssessmentControl' {Maybe Int
Maybe [Text]
Maybe [ControlComment]
Maybe Text
Maybe ControlResponse
Maybe ControlStatus
status :: Maybe ControlStatus
response :: Maybe ControlResponse
name :: Maybe Text
id :: Maybe Text
evidenceSources :: Maybe [Text]
evidenceCount :: Maybe Int
description :: Maybe Text
comments :: Maybe [ControlComment]
assessmentReportEvidenceCount :: Maybe Int
$sel:status:AssessmentControl' :: AssessmentControl -> Maybe ControlStatus
$sel:response:AssessmentControl' :: AssessmentControl -> Maybe ControlResponse
$sel:name:AssessmentControl' :: AssessmentControl -> Maybe Text
$sel:id:AssessmentControl' :: AssessmentControl -> Maybe Text
$sel:evidenceSources:AssessmentControl' :: AssessmentControl -> Maybe [Text]
$sel:evidenceCount:AssessmentControl' :: AssessmentControl -> Maybe Int
$sel:description:AssessmentControl' :: AssessmentControl -> Maybe Text
$sel:comments:AssessmentControl' :: AssessmentControl -> Maybe [ControlComment]
$sel:assessmentReportEvidenceCount:AssessmentControl' :: AssessmentControl -> Maybe Int
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
assessmentReportEvidenceCount
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [ControlComment]
comments
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Int
evidenceCount
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Text]
evidenceSources
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
id
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
name
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ControlResponse
response
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ControlStatus
status

instance Prelude.NFData AssessmentControl where
  rnf :: AssessmentControl -> ()
rnf AssessmentControl' {Maybe Int
Maybe [Text]
Maybe [ControlComment]
Maybe Text
Maybe ControlResponse
Maybe ControlStatus
status :: Maybe ControlStatus
response :: Maybe ControlResponse
name :: Maybe Text
id :: Maybe Text
evidenceSources :: Maybe [Text]
evidenceCount :: Maybe Int
description :: Maybe Text
comments :: Maybe [ControlComment]
assessmentReportEvidenceCount :: Maybe Int
$sel:status:AssessmentControl' :: AssessmentControl -> Maybe ControlStatus
$sel:response:AssessmentControl' :: AssessmentControl -> Maybe ControlResponse
$sel:name:AssessmentControl' :: AssessmentControl -> Maybe Text
$sel:id:AssessmentControl' :: AssessmentControl -> Maybe Text
$sel:evidenceSources:AssessmentControl' :: AssessmentControl -> Maybe [Text]
$sel:evidenceCount:AssessmentControl' :: AssessmentControl -> Maybe Int
$sel:description:AssessmentControl' :: AssessmentControl -> Maybe Text
$sel:comments:AssessmentControl' :: AssessmentControl -> Maybe [ControlComment]
$sel:assessmentReportEvidenceCount:AssessmentControl' :: AssessmentControl -> Maybe Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Int
assessmentReportEvidenceCount
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [ControlComment]
comments
      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 Int
evidenceCount
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Text]
evidenceSources
      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 Text
name
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ControlResponse
response
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ControlStatus
status