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

import Amazonka.AuditManager.Types.AssessmentStatus
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

-- | A metadata object that\'s associated with an assessment in Audit
-- Manager.
--
-- /See:/ 'newAssessmentMetadataItem' smart constructor.
data AssessmentMetadataItem = AssessmentMetadataItem'
  { -- | The name of the compliance standard that\'s related to the assessment,
    -- such as PCI-DSS.
    AssessmentMetadataItem -> Maybe Text
complianceType :: Prelude.Maybe Prelude.Text,
    -- | Specifies when the assessment was created.
    AssessmentMetadataItem -> Maybe POSIX
creationTime :: Prelude.Maybe Data.POSIX,
    -- | The delegations that are associated with the assessment.
    AssessmentMetadataItem -> Maybe [Delegation]
delegations :: Prelude.Maybe [Delegation],
    -- | The unique identifier for the assessment.
    AssessmentMetadataItem -> Maybe Text
id :: Prelude.Maybe Prelude.Text,
    -- | The time of the most recent update.
    AssessmentMetadataItem -> Maybe POSIX
lastUpdated :: Prelude.Maybe Data.POSIX,
    -- | The name of the assessment.
    AssessmentMetadataItem -> Maybe Text
name :: Prelude.Maybe Prelude.Text,
    -- | The roles that are associated with the assessment.
    AssessmentMetadataItem -> Maybe [Role]
roles :: Prelude.Maybe [Role],
    -- | The current status of the assessment.
    AssessmentMetadataItem -> Maybe AssessmentStatus
status :: Prelude.Maybe AssessmentStatus
  }
  deriving (AssessmentMetadataItem -> AssessmentMetadataItem -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AssessmentMetadataItem -> AssessmentMetadataItem -> Bool
$c/= :: AssessmentMetadataItem -> AssessmentMetadataItem -> Bool
== :: AssessmentMetadataItem -> AssessmentMetadataItem -> Bool
$c== :: AssessmentMetadataItem -> AssessmentMetadataItem -> Bool
Prelude.Eq, ReadPrec [AssessmentMetadataItem]
ReadPrec AssessmentMetadataItem
Int -> ReadS AssessmentMetadataItem
ReadS [AssessmentMetadataItem]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [AssessmentMetadataItem]
$creadListPrec :: ReadPrec [AssessmentMetadataItem]
readPrec :: ReadPrec AssessmentMetadataItem
$creadPrec :: ReadPrec AssessmentMetadataItem
readList :: ReadS [AssessmentMetadataItem]
$creadList :: ReadS [AssessmentMetadataItem]
readsPrec :: Int -> ReadS AssessmentMetadataItem
$creadsPrec :: Int -> ReadS AssessmentMetadataItem
Prelude.Read, Int -> AssessmentMetadataItem -> ShowS
[AssessmentMetadataItem] -> ShowS
AssessmentMetadataItem -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AssessmentMetadataItem] -> ShowS
$cshowList :: [AssessmentMetadataItem] -> ShowS
show :: AssessmentMetadataItem -> String
$cshow :: AssessmentMetadataItem -> String
showsPrec :: Int -> AssessmentMetadataItem -> ShowS
$cshowsPrec :: Int -> AssessmentMetadataItem -> ShowS
Prelude.Show, forall x. Rep AssessmentMetadataItem x -> AssessmentMetadataItem
forall x. AssessmentMetadataItem -> Rep AssessmentMetadataItem x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep AssessmentMetadataItem x -> AssessmentMetadataItem
$cfrom :: forall x. AssessmentMetadataItem -> Rep AssessmentMetadataItem x
Prelude.Generic)

-- |
-- Create a value of 'AssessmentMetadataItem' 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', 'assessmentMetadataItem_complianceType' - The name of the compliance standard that\'s related to the assessment,
-- such as PCI-DSS.
--
-- 'creationTime', 'assessmentMetadataItem_creationTime' - Specifies when the assessment was created.
--
-- 'delegations', 'assessmentMetadataItem_delegations' - The delegations that are associated with the assessment.
--
-- 'id', 'assessmentMetadataItem_id' - The unique identifier for the assessment.
--
-- 'lastUpdated', 'assessmentMetadataItem_lastUpdated' - The time of the most recent update.
--
-- 'name', 'assessmentMetadataItem_name' - The name of the assessment.
--
-- 'roles', 'assessmentMetadataItem_roles' - The roles that are associated with the assessment.
--
-- 'status', 'assessmentMetadataItem_status' - The current status of the assessment.
newAssessmentMetadataItem ::
  AssessmentMetadataItem
newAssessmentMetadataItem :: AssessmentMetadataItem
newAssessmentMetadataItem =
  AssessmentMetadataItem'
    { $sel:complianceType:AssessmentMetadataItem' :: Maybe Text
complianceType =
        forall a. Maybe a
Prelude.Nothing,
      $sel:creationTime:AssessmentMetadataItem' :: Maybe POSIX
creationTime = forall a. Maybe a
Prelude.Nothing,
      $sel:delegations:AssessmentMetadataItem' :: Maybe [Delegation]
delegations = forall a. Maybe a
Prelude.Nothing,
      $sel:id:AssessmentMetadataItem' :: Maybe Text
id = forall a. Maybe a
Prelude.Nothing,
      $sel:lastUpdated:AssessmentMetadataItem' :: Maybe POSIX
lastUpdated = forall a. Maybe a
Prelude.Nothing,
      $sel:name:AssessmentMetadataItem' :: Maybe Text
name = forall a. Maybe a
Prelude.Nothing,
      $sel:roles:AssessmentMetadataItem' :: Maybe [Role]
roles = forall a. Maybe a
Prelude.Nothing,
      $sel:status:AssessmentMetadataItem' :: Maybe AssessmentStatus
status = forall a. Maybe a
Prelude.Nothing
    }

-- | The name of the compliance standard that\'s related to the assessment,
-- such as PCI-DSS.
assessmentMetadataItem_complianceType :: Lens.Lens' AssessmentMetadataItem (Prelude.Maybe Prelude.Text)
assessmentMetadataItem_complianceType :: Lens' AssessmentMetadataItem (Maybe Text)
assessmentMetadataItem_complianceType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentMetadataItem' {Maybe Text
complianceType :: Maybe Text
$sel:complianceType:AssessmentMetadataItem' :: AssessmentMetadataItem -> Maybe Text
complianceType} -> Maybe Text
complianceType) (\s :: AssessmentMetadataItem
s@AssessmentMetadataItem' {} Maybe Text
a -> AssessmentMetadataItem
s {$sel:complianceType:AssessmentMetadataItem' :: Maybe Text
complianceType = Maybe Text
a} :: AssessmentMetadataItem)

-- | Specifies when the assessment was created.
assessmentMetadataItem_creationTime :: Lens.Lens' AssessmentMetadataItem (Prelude.Maybe Prelude.UTCTime)
assessmentMetadataItem_creationTime :: Lens' AssessmentMetadataItem (Maybe UTCTime)
assessmentMetadataItem_creationTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentMetadataItem' {Maybe POSIX
creationTime :: Maybe POSIX
$sel:creationTime:AssessmentMetadataItem' :: AssessmentMetadataItem -> Maybe POSIX
creationTime} -> Maybe POSIX
creationTime) (\s :: AssessmentMetadataItem
s@AssessmentMetadataItem' {} Maybe POSIX
a -> AssessmentMetadataItem
s {$sel:creationTime:AssessmentMetadataItem' :: Maybe POSIX
creationTime = Maybe POSIX
a} :: AssessmentMetadataItem) 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 (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The delegations that are associated with the assessment.
assessmentMetadataItem_delegations :: Lens.Lens' AssessmentMetadataItem (Prelude.Maybe [Delegation])
assessmentMetadataItem_delegations :: Lens' AssessmentMetadataItem (Maybe [Delegation])
assessmentMetadataItem_delegations = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentMetadataItem' {Maybe [Delegation]
delegations :: Maybe [Delegation]
$sel:delegations:AssessmentMetadataItem' :: AssessmentMetadataItem -> Maybe [Delegation]
delegations} -> Maybe [Delegation]
delegations) (\s :: AssessmentMetadataItem
s@AssessmentMetadataItem' {} Maybe [Delegation]
a -> AssessmentMetadataItem
s {$sel:delegations:AssessmentMetadataItem' :: Maybe [Delegation]
delegations = Maybe [Delegation]
a} :: AssessmentMetadataItem) 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 unique identifier for the assessment.
assessmentMetadataItem_id :: Lens.Lens' AssessmentMetadataItem (Prelude.Maybe Prelude.Text)
assessmentMetadataItem_id :: Lens' AssessmentMetadataItem (Maybe Text)
assessmentMetadataItem_id = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentMetadataItem' {Maybe Text
id :: Maybe Text
$sel:id:AssessmentMetadataItem' :: AssessmentMetadataItem -> Maybe Text
id} -> Maybe Text
id) (\s :: AssessmentMetadataItem
s@AssessmentMetadataItem' {} Maybe Text
a -> AssessmentMetadataItem
s {$sel:id:AssessmentMetadataItem' :: Maybe Text
id = Maybe Text
a} :: AssessmentMetadataItem)

-- | The time of the most recent update.
assessmentMetadataItem_lastUpdated :: Lens.Lens' AssessmentMetadataItem (Prelude.Maybe Prelude.UTCTime)
assessmentMetadataItem_lastUpdated :: Lens' AssessmentMetadataItem (Maybe UTCTime)
assessmentMetadataItem_lastUpdated = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentMetadataItem' {Maybe POSIX
lastUpdated :: Maybe POSIX
$sel:lastUpdated:AssessmentMetadataItem' :: AssessmentMetadataItem -> Maybe POSIX
lastUpdated} -> Maybe POSIX
lastUpdated) (\s :: AssessmentMetadataItem
s@AssessmentMetadataItem' {} Maybe POSIX
a -> AssessmentMetadataItem
s {$sel:lastUpdated:AssessmentMetadataItem' :: Maybe POSIX
lastUpdated = Maybe POSIX
a} :: AssessmentMetadataItem) 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 (a :: Format). Iso' (Time a) UTCTime
Data._Time

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

-- | The roles that are associated with the assessment.
assessmentMetadataItem_roles :: Lens.Lens' AssessmentMetadataItem (Prelude.Maybe [Role])
assessmentMetadataItem_roles :: Lens' AssessmentMetadataItem (Maybe [Role])
assessmentMetadataItem_roles = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentMetadataItem' {Maybe [Role]
roles :: Maybe [Role]
$sel:roles:AssessmentMetadataItem' :: AssessmentMetadataItem -> Maybe [Role]
roles} -> Maybe [Role]
roles) (\s :: AssessmentMetadataItem
s@AssessmentMetadataItem' {} Maybe [Role]
a -> AssessmentMetadataItem
s {$sel:roles:AssessmentMetadataItem' :: Maybe [Role]
roles = Maybe [Role]
a} :: AssessmentMetadataItem) 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 assessment.
assessmentMetadataItem_status :: Lens.Lens' AssessmentMetadataItem (Prelude.Maybe AssessmentStatus)
assessmentMetadataItem_status :: Lens' AssessmentMetadataItem (Maybe AssessmentStatus)
assessmentMetadataItem_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AssessmentMetadataItem' {Maybe AssessmentStatus
status :: Maybe AssessmentStatus
$sel:status:AssessmentMetadataItem' :: AssessmentMetadataItem -> Maybe AssessmentStatus
status} -> Maybe AssessmentStatus
status) (\s :: AssessmentMetadataItem
s@AssessmentMetadataItem' {} Maybe AssessmentStatus
a -> AssessmentMetadataItem
s {$sel:status:AssessmentMetadataItem' :: Maybe AssessmentStatus
status = Maybe AssessmentStatus
a} :: AssessmentMetadataItem)

instance Data.FromJSON AssessmentMetadataItem where
  parseJSON :: Value -> Parser AssessmentMetadataItem
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"AssessmentMetadataItem"
      ( \Object
x ->
          Maybe Text
-> Maybe POSIX
-> Maybe [Delegation]
-> Maybe Text
-> Maybe POSIX
-> Maybe Text
-> Maybe [Role]
-> Maybe AssessmentStatus
-> AssessmentMetadataItem
AssessmentMetadataItem'
            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
"creationTime")
            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
"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
"lastUpdated")
            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
"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")
      )

instance Prelude.Hashable AssessmentMetadataItem where
  hashWithSalt :: Int -> AssessmentMetadataItem -> Int
hashWithSalt Int
_salt AssessmentMetadataItem' {Maybe [Role]
Maybe [Delegation]
Maybe Text
Maybe POSIX
Maybe AssessmentStatus
status :: Maybe AssessmentStatus
roles :: Maybe [Role]
name :: Maybe Text
lastUpdated :: Maybe POSIX
id :: Maybe Text
delegations :: Maybe [Delegation]
creationTime :: Maybe POSIX
complianceType :: Maybe Text
$sel:status:AssessmentMetadataItem' :: AssessmentMetadataItem -> Maybe AssessmentStatus
$sel:roles:AssessmentMetadataItem' :: AssessmentMetadataItem -> Maybe [Role]
$sel:name:AssessmentMetadataItem' :: AssessmentMetadataItem -> Maybe Text
$sel:lastUpdated:AssessmentMetadataItem' :: AssessmentMetadataItem -> Maybe POSIX
$sel:id:AssessmentMetadataItem' :: AssessmentMetadataItem -> Maybe Text
$sel:delegations:AssessmentMetadataItem' :: AssessmentMetadataItem -> Maybe [Delegation]
$sel:creationTime:AssessmentMetadataItem' :: AssessmentMetadataItem -> Maybe POSIX
$sel:complianceType:AssessmentMetadataItem' :: AssessmentMetadataItem -> 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 POSIX
creationTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Delegation]
delegations
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
id
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
lastUpdated
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
name
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Role]
roles
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AssessmentStatus
status

instance Prelude.NFData AssessmentMetadataItem where
  rnf :: AssessmentMetadataItem -> ()
rnf AssessmentMetadataItem' {Maybe [Role]
Maybe [Delegation]
Maybe Text
Maybe POSIX
Maybe AssessmentStatus
status :: Maybe AssessmentStatus
roles :: Maybe [Role]
name :: Maybe Text
lastUpdated :: Maybe POSIX
id :: Maybe Text
delegations :: Maybe [Delegation]
creationTime :: Maybe POSIX
complianceType :: Maybe Text
$sel:status:AssessmentMetadataItem' :: AssessmentMetadataItem -> Maybe AssessmentStatus
$sel:roles:AssessmentMetadataItem' :: AssessmentMetadataItem -> Maybe [Role]
$sel:name:AssessmentMetadataItem' :: AssessmentMetadataItem -> Maybe Text
$sel:lastUpdated:AssessmentMetadataItem' :: AssessmentMetadataItem -> Maybe POSIX
$sel:id:AssessmentMetadataItem' :: AssessmentMetadataItem -> Maybe Text
$sel:delegations:AssessmentMetadataItem' :: AssessmentMetadataItem -> Maybe [Delegation]
$sel:creationTime:AssessmentMetadataItem' :: AssessmentMetadataItem -> Maybe POSIX
$sel:complianceType:AssessmentMetadataItem' :: AssessmentMetadataItem -> 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 POSIX
creationTime
      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
id
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
lastUpdated
      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 [Role]
roles
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe AssessmentStatus
status