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

import Amazonka.AuditManager.Types.AWSAccount
import Amazonka.AuditManager.Types.AssessmentFramework
import Amazonka.AuditManager.Types.AssessmentMetadata
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

-- | An entity that defines the scope of audit evidence collected by Audit
-- Manager. An Audit Manager assessment is an implementation of an Audit
-- Manager framework.
--
-- /See:/ 'newAssessment' smart constructor.
data Assessment = Assessment'
  { -- | The Amazon Resource Name (ARN) of the assessment.
    Assessment -> Maybe Text
arn :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Web Services account that\'s associated with the assessment.
    Assessment -> Maybe AWSAccount
awsAccount :: Prelude.Maybe AWSAccount,
    -- | The framework that the assessment was created from.
    Assessment -> Maybe AssessmentFramework
framework :: Prelude.Maybe AssessmentFramework,
    -- | The metadata for the assessment.
    Assessment -> Maybe AssessmentMetadata
metadata :: Prelude.Maybe AssessmentMetadata,
    -- | The tags that are associated with the assessment.
    Assessment -> Maybe (HashMap Text Text)
tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
  }
  deriving (Assessment -> Assessment -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Assessment -> Assessment -> Bool
$c/= :: Assessment -> Assessment -> Bool
== :: Assessment -> Assessment -> Bool
$c== :: Assessment -> Assessment -> Bool
Prelude.Eq, ReadPrec [Assessment]
ReadPrec Assessment
Int -> ReadS Assessment
ReadS [Assessment]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Assessment]
$creadListPrec :: ReadPrec [Assessment]
readPrec :: ReadPrec Assessment
$creadPrec :: ReadPrec Assessment
readList :: ReadS [Assessment]
$creadList :: ReadS [Assessment]
readsPrec :: Int -> ReadS Assessment
$creadsPrec :: Int -> ReadS Assessment
Prelude.Read, Int -> Assessment -> ShowS
[Assessment] -> ShowS
Assessment -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Assessment] -> ShowS
$cshowList :: [Assessment] -> ShowS
show :: Assessment -> String
$cshow :: Assessment -> String
showsPrec :: Int -> Assessment -> ShowS
$cshowsPrec :: Int -> Assessment -> ShowS
Prelude.Show, forall x. Rep Assessment x -> Assessment
forall x. Assessment -> Rep Assessment x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Assessment x -> Assessment
$cfrom :: forall x. Assessment -> Rep Assessment x
Prelude.Generic)

-- |
-- Create a value of 'Assessment' 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:
--
-- 'arn', 'assessment_arn' - The Amazon Resource Name (ARN) of the assessment.
--
-- 'awsAccount', 'assessment_awsAccount' - The Amazon Web Services account that\'s associated with the assessment.
--
-- 'framework', 'assessment_framework' - The framework that the assessment was created from.
--
-- 'metadata', 'assessment_metadata' - The metadata for the assessment.
--
-- 'tags', 'assessment_tags' - The tags that are associated with the assessment.
newAssessment ::
  Assessment
newAssessment :: Assessment
newAssessment =
  Assessment'
    { $sel:arn:Assessment' :: Maybe Text
arn = forall a. Maybe a
Prelude.Nothing,
      $sel:awsAccount:Assessment' :: Maybe AWSAccount
awsAccount = forall a. Maybe a
Prelude.Nothing,
      $sel:framework:Assessment' :: Maybe AssessmentFramework
framework = forall a. Maybe a
Prelude.Nothing,
      $sel:metadata:Assessment' :: Maybe AssessmentMetadata
metadata = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:Assessment' :: Maybe (HashMap Text Text)
tags = forall a. Maybe a
Prelude.Nothing
    }

-- | The Amazon Resource Name (ARN) of the assessment.
assessment_arn :: Lens.Lens' Assessment (Prelude.Maybe Prelude.Text)
assessment_arn :: Lens' Assessment (Maybe Text)
assessment_arn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Assessment' {Maybe Text
arn :: Maybe Text
$sel:arn:Assessment' :: Assessment -> Maybe Text
arn} -> Maybe Text
arn) (\s :: Assessment
s@Assessment' {} Maybe Text
a -> Assessment
s {$sel:arn:Assessment' :: Maybe Text
arn = Maybe Text
a} :: Assessment)

-- | The Amazon Web Services account that\'s associated with the assessment.
assessment_awsAccount :: Lens.Lens' Assessment (Prelude.Maybe AWSAccount)
assessment_awsAccount :: Lens' Assessment (Maybe AWSAccount)
assessment_awsAccount = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Assessment' {Maybe AWSAccount
awsAccount :: Maybe AWSAccount
$sel:awsAccount:Assessment' :: Assessment -> Maybe AWSAccount
awsAccount} -> Maybe AWSAccount
awsAccount) (\s :: Assessment
s@Assessment' {} Maybe AWSAccount
a -> Assessment
s {$sel:awsAccount:Assessment' :: Maybe AWSAccount
awsAccount = Maybe AWSAccount
a} :: Assessment)

-- | The framework that the assessment was created from.
assessment_framework :: Lens.Lens' Assessment (Prelude.Maybe AssessmentFramework)
assessment_framework :: Lens' Assessment (Maybe AssessmentFramework)
assessment_framework = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Assessment' {Maybe AssessmentFramework
framework :: Maybe AssessmentFramework
$sel:framework:Assessment' :: Assessment -> Maybe AssessmentFramework
framework} -> Maybe AssessmentFramework
framework) (\s :: Assessment
s@Assessment' {} Maybe AssessmentFramework
a -> Assessment
s {$sel:framework:Assessment' :: Maybe AssessmentFramework
framework = Maybe AssessmentFramework
a} :: Assessment)

-- | The metadata for the assessment.
assessment_metadata :: Lens.Lens' Assessment (Prelude.Maybe AssessmentMetadata)
assessment_metadata :: Lens' Assessment (Maybe AssessmentMetadata)
assessment_metadata = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Assessment' {Maybe AssessmentMetadata
metadata :: Maybe AssessmentMetadata
$sel:metadata:Assessment' :: Assessment -> Maybe AssessmentMetadata
metadata} -> Maybe AssessmentMetadata
metadata) (\s :: Assessment
s@Assessment' {} Maybe AssessmentMetadata
a -> Assessment
s {$sel:metadata:Assessment' :: Maybe AssessmentMetadata
metadata = Maybe AssessmentMetadata
a} :: Assessment)

-- | The tags that are associated with the assessment.
assessment_tags :: Lens.Lens' Assessment (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
assessment_tags :: Lens' Assessment (Maybe (HashMap Text Text))
assessment_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Assessment' {Maybe (HashMap Text Text)
tags :: Maybe (HashMap Text Text)
$sel:tags:Assessment' :: Assessment -> Maybe (HashMap Text Text)
tags} -> Maybe (HashMap Text Text)
tags) (\s :: Assessment
s@Assessment' {} Maybe (HashMap Text Text)
a -> Assessment
s {$sel:tags:Assessment' :: Maybe (HashMap Text Text)
tags = Maybe (HashMap Text Text)
a} :: Assessment) 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

instance Data.FromJSON Assessment where
  parseJSON :: Value -> Parser Assessment
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"Assessment"
      ( \Object
x ->
          Maybe Text
-> Maybe AWSAccount
-> Maybe AssessmentFramework
-> Maybe AssessmentMetadata
-> Maybe (HashMap Text Text)
-> Assessment
Assessment'
            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
"arn")
            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
"awsAccount")
            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
"framework")
            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
"metadata")
            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
"tags" forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty)
      )

instance Prelude.Hashable Assessment where
  hashWithSalt :: Int -> Assessment -> Int
hashWithSalt Int
_salt Assessment' {Maybe Text
Maybe (HashMap Text Text)
Maybe AWSAccount
Maybe AssessmentFramework
Maybe AssessmentMetadata
tags :: Maybe (HashMap Text Text)
metadata :: Maybe AssessmentMetadata
framework :: Maybe AssessmentFramework
awsAccount :: Maybe AWSAccount
arn :: Maybe Text
$sel:tags:Assessment' :: Assessment -> Maybe (HashMap Text Text)
$sel:metadata:Assessment' :: Assessment -> Maybe AssessmentMetadata
$sel:framework:Assessment' :: Assessment -> Maybe AssessmentFramework
$sel:awsAccount:Assessment' :: Assessment -> Maybe AWSAccount
$sel:arn:Assessment' :: Assessment -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
arn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AWSAccount
awsAccount
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AssessmentFramework
framework
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AssessmentMetadata
metadata
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap Text Text)
tags

instance Prelude.NFData Assessment where
  rnf :: Assessment -> ()
rnf Assessment' {Maybe Text
Maybe (HashMap Text Text)
Maybe AWSAccount
Maybe AssessmentFramework
Maybe AssessmentMetadata
tags :: Maybe (HashMap Text Text)
metadata :: Maybe AssessmentMetadata
framework :: Maybe AssessmentFramework
awsAccount :: Maybe AWSAccount
arn :: Maybe Text
$sel:tags:Assessment' :: Assessment -> Maybe (HashMap Text Text)
$sel:metadata:Assessment' :: Assessment -> Maybe AssessmentMetadata
$sel:framework:Assessment' :: Assessment -> Maybe AssessmentFramework
$sel:awsAccount:Assessment' :: Assessment -> Maybe AWSAccount
$sel:arn:Assessment' :: Assessment -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
arn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe AWSAccount
awsAccount
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe AssessmentFramework
framework
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe AssessmentMetadata
metadata
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (HashMap Text Text)
tags