{-# 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.ResilienceHub.Types.AppAssessment
-- 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.ResilienceHub.Types.AppAssessment 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.ResilienceHub.Types.AssessmentInvoker
import Amazonka.ResilienceHub.Types.AssessmentStatus
import Amazonka.ResilienceHub.Types.ComplianceStatus
import Amazonka.ResilienceHub.Types.Cost
import Amazonka.ResilienceHub.Types.DisruptionCompliance
import Amazonka.ResilienceHub.Types.DisruptionType
import Amazonka.ResilienceHub.Types.ResiliencyPolicy
import Amazonka.ResilienceHub.Types.ResiliencyScore
import Amazonka.ResilienceHub.Types.ResourceErrorsDetails

-- | Defines an application assessment.
--
-- /See:/ 'newAppAssessment' smart constructor.
data AppAssessment = AppAssessment'
  { -- | The Amazon Resource Name (ARN) of the application. The format for this
    -- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
    -- For more information about ARNs, see
    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
    -- in the /AWS General Reference/.
    AppAssessment -> Maybe Text
appArn :: Prelude.Maybe Prelude.Text,
    -- | The version of the application.
    AppAssessment -> Maybe Text
appVersion :: Prelude.Maybe Prelude.Text,
    -- | The name of the assessment.
    AppAssessment -> Maybe Text
assessmentName :: Prelude.Maybe Prelude.Text,
    -- | The application compliance against the resiliency policy.
    AppAssessment
-> Maybe (HashMap DisruptionType DisruptionCompliance)
compliance :: Prelude.Maybe (Prelude.HashMap DisruptionType DisruptionCompliance),
    -- | The current status of the compliance for the resiliency policy.
    AppAssessment -> Maybe ComplianceStatus
complianceStatus :: Prelude.Maybe ComplianceStatus,
    -- | The cost for the application.
    AppAssessment -> Maybe Cost
cost :: Prelude.Maybe Cost,
    -- | The end time for the action.
    AppAssessment -> Maybe POSIX
endTime :: Prelude.Maybe Data.POSIX,
    -- | Error or warning message from the assessment execution
    AppAssessment -> Maybe Text
message :: Prelude.Maybe Prelude.Text,
    -- | The resiliency policy.
    AppAssessment -> Maybe ResiliencyPolicy
policy :: Prelude.Maybe ResiliencyPolicy,
    -- | The current resiliency score for the application.
    AppAssessment -> Maybe ResiliencyScore
resiliencyScore :: Prelude.Maybe ResiliencyScore,
    -- | A resource error object containing a list of errors retrieving an
    -- application\'s resources.
    AppAssessment -> Maybe ResourceErrorsDetails
resourceErrorsDetails :: Prelude.Maybe ResourceErrorsDetails,
    -- | The starting time for the action.
    AppAssessment -> Maybe POSIX
startTime :: Prelude.Maybe Data.POSIX,
    -- | The tags assigned to the resource. A tag is a label that you assign to
    -- an Amazon Web Services resource. Each tag consists of a key\/value pair.
    AppAssessment -> Maybe (Sensitive (HashMap Text Text))
tags :: Prelude.Maybe (Data.Sensitive (Prelude.HashMap Prelude.Text Prelude.Text)),
    -- | The Amazon Resource Name (ARN) of the assessment. The format for this
    -- ARN is:
    -- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
    -- For more information about ARNs, see
    -- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
    -- in the /AWS General Reference/.
    AppAssessment -> Text
assessmentArn :: Prelude.Text,
    -- | The current status of the assessment for the resiliency policy.
    AppAssessment -> AssessmentStatus
assessmentStatus :: AssessmentStatus,
    -- | The entity that invoked the assessment.
    AppAssessment -> AssessmentInvoker
invoker :: AssessmentInvoker
  }
  deriving (AppAssessment -> AppAssessment -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AppAssessment -> AppAssessment -> Bool
$c/= :: AppAssessment -> AppAssessment -> Bool
== :: AppAssessment -> AppAssessment -> Bool
$c== :: AppAssessment -> AppAssessment -> Bool
Prelude.Eq, Int -> AppAssessment -> ShowS
[AppAssessment] -> ShowS
AppAssessment -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AppAssessment] -> ShowS
$cshowList :: [AppAssessment] -> ShowS
show :: AppAssessment -> String
$cshow :: AppAssessment -> String
showsPrec :: Int -> AppAssessment -> ShowS
$cshowsPrec :: Int -> AppAssessment -> ShowS
Prelude.Show, forall x. Rep AppAssessment x -> AppAssessment
forall x. AppAssessment -> Rep AppAssessment x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep AppAssessment x -> AppAssessment
$cfrom :: forall x. AppAssessment -> Rep AppAssessment x
Prelude.Generic)

-- |
-- Create a value of 'AppAssessment' 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:
--
-- 'appArn', 'appAssessment_appArn' - The Amazon Resource Name (ARN) of the application. The format for this
-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
-- For more information about ARNs, see
-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
-- in the /AWS General Reference/.
--
-- 'appVersion', 'appAssessment_appVersion' - The version of the application.
--
-- 'assessmentName', 'appAssessment_assessmentName' - The name of the assessment.
--
-- 'compliance', 'appAssessment_compliance' - The application compliance against the resiliency policy.
--
-- 'complianceStatus', 'appAssessment_complianceStatus' - The current status of the compliance for the resiliency policy.
--
-- 'cost', 'appAssessment_cost' - The cost for the application.
--
-- 'endTime', 'appAssessment_endTime' - The end time for the action.
--
-- 'message', 'appAssessment_message' - Error or warning message from the assessment execution
--
-- 'policy', 'appAssessment_policy' - The resiliency policy.
--
-- 'resiliencyScore', 'appAssessment_resiliencyScore' - The current resiliency score for the application.
--
-- 'resourceErrorsDetails', 'appAssessment_resourceErrorsDetails' - A resource error object containing a list of errors retrieving an
-- application\'s resources.
--
-- 'startTime', 'appAssessment_startTime' - The starting time for the action.
--
-- 'tags', 'appAssessment_tags' - The tags assigned to the resource. A tag is a label that you assign to
-- an Amazon Web Services resource. Each tag consists of a key\/value pair.
--
-- 'assessmentArn', 'appAssessment_assessmentArn' - The Amazon Resource Name (ARN) of the assessment. The format for this
-- ARN is:
-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
-- For more information about ARNs, see
-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
-- in the /AWS General Reference/.
--
-- 'assessmentStatus', 'appAssessment_assessmentStatus' - The current status of the assessment for the resiliency policy.
--
-- 'invoker', 'appAssessment_invoker' - The entity that invoked the assessment.
newAppAssessment ::
  -- | 'assessmentArn'
  Prelude.Text ->
  -- | 'assessmentStatus'
  AssessmentStatus ->
  -- | 'invoker'
  AssessmentInvoker ->
  AppAssessment
newAppAssessment :: Text -> AssessmentStatus -> AssessmentInvoker -> AppAssessment
newAppAssessment
  Text
pAssessmentArn_
  AssessmentStatus
pAssessmentStatus_
  AssessmentInvoker
pInvoker_ =
    AppAssessment'
      { $sel:appArn:AppAssessment' :: Maybe Text
appArn = forall a. Maybe a
Prelude.Nothing,
        $sel:appVersion:AppAssessment' :: Maybe Text
appVersion = forall a. Maybe a
Prelude.Nothing,
        $sel:assessmentName:AppAssessment' :: Maybe Text
assessmentName = forall a. Maybe a
Prelude.Nothing,
        $sel:compliance:AppAssessment' :: Maybe (HashMap DisruptionType DisruptionCompliance)
compliance = forall a. Maybe a
Prelude.Nothing,
        $sel:complianceStatus:AppAssessment' :: Maybe ComplianceStatus
complianceStatus = forall a. Maybe a
Prelude.Nothing,
        $sel:cost:AppAssessment' :: Maybe Cost
cost = forall a. Maybe a
Prelude.Nothing,
        $sel:endTime:AppAssessment' :: Maybe POSIX
endTime = forall a. Maybe a
Prelude.Nothing,
        $sel:message:AppAssessment' :: Maybe Text
message = forall a. Maybe a
Prelude.Nothing,
        $sel:policy:AppAssessment' :: Maybe ResiliencyPolicy
policy = forall a. Maybe a
Prelude.Nothing,
        $sel:resiliencyScore:AppAssessment' :: Maybe ResiliencyScore
resiliencyScore = forall a. Maybe a
Prelude.Nothing,
        $sel:resourceErrorsDetails:AppAssessment' :: Maybe ResourceErrorsDetails
resourceErrorsDetails = forall a. Maybe a
Prelude.Nothing,
        $sel:startTime:AppAssessment' :: Maybe POSIX
startTime = forall a. Maybe a
Prelude.Nothing,
        $sel:tags:AppAssessment' :: Maybe (Sensitive (HashMap Text Text))
tags = forall a. Maybe a
Prelude.Nothing,
        $sel:assessmentArn:AppAssessment' :: Text
assessmentArn = Text
pAssessmentArn_,
        $sel:assessmentStatus:AppAssessment' :: AssessmentStatus
assessmentStatus = AssessmentStatus
pAssessmentStatus_,
        $sel:invoker:AppAssessment' :: AssessmentInvoker
invoker = AssessmentInvoker
pInvoker_
      }

-- | The Amazon Resource Name (ARN) of the application. The format for this
-- ARN is: arn:@partition@:resiliencehub:@region@:@account@:app\/@app-id@.
-- For more information about ARNs, see
-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
-- in the /AWS General Reference/.
appAssessment_appArn :: Lens.Lens' AppAssessment (Prelude.Maybe Prelude.Text)
appAssessment_appArn :: Lens' AppAssessment (Maybe Text)
appAssessment_appArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AppAssessment' {Maybe Text
appArn :: Maybe Text
$sel:appArn:AppAssessment' :: AppAssessment -> Maybe Text
appArn} -> Maybe Text
appArn) (\s :: AppAssessment
s@AppAssessment' {} Maybe Text
a -> AppAssessment
s {$sel:appArn:AppAssessment' :: Maybe Text
appArn = Maybe Text
a} :: AppAssessment)

-- | The version of the application.
appAssessment_appVersion :: Lens.Lens' AppAssessment (Prelude.Maybe Prelude.Text)
appAssessment_appVersion :: Lens' AppAssessment (Maybe Text)
appAssessment_appVersion = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AppAssessment' {Maybe Text
appVersion :: Maybe Text
$sel:appVersion:AppAssessment' :: AppAssessment -> Maybe Text
appVersion} -> Maybe Text
appVersion) (\s :: AppAssessment
s@AppAssessment' {} Maybe Text
a -> AppAssessment
s {$sel:appVersion:AppAssessment' :: Maybe Text
appVersion = Maybe Text
a} :: AppAssessment)

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

-- | The application compliance against the resiliency policy.
appAssessment_compliance :: Lens.Lens' AppAssessment (Prelude.Maybe (Prelude.HashMap DisruptionType DisruptionCompliance))
appAssessment_compliance :: Lens'
  AppAssessment (Maybe (HashMap DisruptionType DisruptionCompliance))
appAssessment_compliance = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AppAssessment' {Maybe (HashMap DisruptionType DisruptionCompliance)
compliance :: Maybe (HashMap DisruptionType DisruptionCompliance)
$sel:compliance:AppAssessment' :: AppAssessment
-> Maybe (HashMap DisruptionType DisruptionCompliance)
compliance} -> Maybe (HashMap DisruptionType DisruptionCompliance)
compliance) (\s :: AppAssessment
s@AppAssessment' {} Maybe (HashMap DisruptionType DisruptionCompliance)
a -> AppAssessment
s {$sel:compliance:AppAssessment' :: Maybe (HashMap DisruptionType DisruptionCompliance)
compliance = Maybe (HashMap DisruptionType DisruptionCompliance)
a} :: AppAssessment) 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 compliance for the resiliency policy.
appAssessment_complianceStatus :: Lens.Lens' AppAssessment (Prelude.Maybe ComplianceStatus)
appAssessment_complianceStatus :: Lens' AppAssessment (Maybe ComplianceStatus)
appAssessment_complianceStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AppAssessment' {Maybe ComplianceStatus
complianceStatus :: Maybe ComplianceStatus
$sel:complianceStatus:AppAssessment' :: AppAssessment -> Maybe ComplianceStatus
complianceStatus} -> Maybe ComplianceStatus
complianceStatus) (\s :: AppAssessment
s@AppAssessment' {} Maybe ComplianceStatus
a -> AppAssessment
s {$sel:complianceStatus:AppAssessment' :: Maybe ComplianceStatus
complianceStatus = Maybe ComplianceStatus
a} :: AppAssessment)

-- | The cost for the application.
appAssessment_cost :: Lens.Lens' AppAssessment (Prelude.Maybe Cost)
appAssessment_cost :: Lens' AppAssessment (Maybe Cost)
appAssessment_cost = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AppAssessment' {Maybe Cost
cost :: Maybe Cost
$sel:cost:AppAssessment' :: AppAssessment -> Maybe Cost
cost} -> Maybe Cost
cost) (\s :: AppAssessment
s@AppAssessment' {} Maybe Cost
a -> AppAssessment
s {$sel:cost:AppAssessment' :: Maybe Cost
cost = Maybe Cost
a} :: AppAssessment)

-- | The end time for the action.
appAssessment_endTime :: Lens.Lens' AppAssessment (Prelude.Maybe Prelude.UTCTime)
appAssessment_endTime :: Lens' AppAssessment (Maybe UTCTime)
appAssessment_endTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AppAssessment' {Maybe POSIX
endTime :: Maybe POSIX
$sel:endTime:AppAssessment' :: AppAssessment -> Maybe POSIX
endTime} -> Maybe POSIX
endTime) (\s :: AppAssessment
s@AppAssessment' {} Maybe POSIX
a -> AppAssessment
s {$sel:endTime:AppAssessment' :: Maybe POSIX
endTime = Maybe POSIX
a} :: AppAssessment) 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

-- | Error or warning message from the assessment execution
appAssessment_message :: Lens.Lens' AppAssessment (Prelude.Maybe Prelude.Text)
appAssessment_message :: Lens' AppAssessment (Maybe Text)
appAssessment_message = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AppAssessment' {Maybe Text
message :: Maybe Text
$sel:message:AppAssessment' :: AppAssessment -> Maybe Text
message} -> Maybe Text
message) (\s :: AppAssessment
s@AppAssessment' {} Maybe Text
a -> AppAssessment
s {$sel:message:AppAssessment' :: Maybe Text
message = Maybe Text
a} :: AppAssessment)

-- | The resiliency policy.
appAssessment_policy :: Lens.Lens' AppAssessment (Prelude.Maybe ResiliencyPolicy)
appAssessment_policy :: Lens' AppAssessment (Maybe ResiliencyPolicy)
appAssessment_policy = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AppAssessment' {Maybe ResiliencyPolicy
policy :: Maybe ResiliencyPolicy
$sel:policy:AppAssessment' :: AppAssessment -> Maybe ResiliencyPolicy
policy} -> Maybe ResiliencyPolicy
policy) (\s :: AppAssessment
s@AppAssessment' {} Maybe ResiliencyPolicy
a -> AppAssessment
s {$sel:policy:AppAssessment' :: Maybe ResiliencyPolicy
policy = Maybe ResiliencyPolicy
a} :: AppAssessment)

-- | The current resiliency score for the application.
appAssessment_resiliencyScore :: Lens.Lens' AppAssessment (Prelude.Maybe ResiliencyScore)
appAssessment_resiliencyScore :: Lens' AppAssessment (Maybe ResiliencyScore)
appAssessment_resiliencyScore = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AppAssessment' {Maybe ResiliencyScore
resiliencyScore :: Maybe ResiliencyScore
$sel:resiliencyScore:AppAssessment' :: AppAssessment -> Maybe ResiliencyScore
resiliencyScore} -> Maybe ResiliencyScore
resiliencyScore) (\s :: AppAssessment
s@AppAssessment' {} Maybe ResiliencyScore
a -> AppAssessment
s {$sel:resiliencyScore:AppAssessment' :: Maybe ResiliencyScore
resiliencyScore = Maybe ResiliencyScore
a} :: AppAssessment)

-- | A resource error object containing a list of errors retrieving an
-- application\'s resources.
appAssessment_resourceErrorsDetails :: Lens.Lens' AppAssessment (Prelude.Maybe ResourceErrorsDetails)
appAssessment_resourceErrorsDetails :: Lens' AppAssessment (Maybe ResourceErrorsDetails)
appAssessment_resourceErrorsDetails = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AppAssessment' {Maybe ResourceErrorsDetails
resourceErrorsDetails :: Maybe ResourceErrorsDetails
$sel:resourceErrorsDetails:AppAssessment' :: AppAssessment -> Maybe ResourceErrorsDetails
resourceErrorsDetails} -> Maybe ResourceErrorsDetails
resourceErrorsDetails) (\s :: AppAssessment
s@AppAssessment' {} Maybe ResourceErrorsDetails
a -> AppAssessment
s {$sel:resourceErrorsDetails:AppAssessment' :: Maybe ResourceErrorsDetails
resourceErrorsDetails = Maybe ResourceErrorsDetails
a} :: AppAssessment)

-- | The starting time for the action.
appAssessment_startTime :: Lens.Lens' AppAssessment (Prelude.Maybe Prelude.UTCTime)
appAssessment_startTime :: Lens' AppAssessment (Maybe UTCTime)
appAssessment_startTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AppAssessment' {Maybe POSIX
startTime :: Maybe POSIX
$sel:startTime:AppAssessment' :: AppAssessment -> Maybe POSIX
startTime} -> Maybe POSIX
startTime) (\s :: AppAssessment
s@AppAssessment' {} Maybe POSIX
a -> AppAssessment
s {$sel:startTime:AppAssessment' :: Maybe POSIX
startTime = Maybe POSIX
a} :: AppAssessment) 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 tags assigned to the resource. A tag is a label that you assign to
-- an Amazon Web Services resource. Each tag consists of a key\/value pair.
appAssessment_tags :: Lens.Lens' AppAssessment (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
appAssessment_tags :: Lens' AppAssessment (Maybe (HashMap Text Text))
appAssessment_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AppAssessment' {Maybe (Sensitive (HashMap Text Text))
tags :: Maybe (Sensitive (HashMap Text Text))
$sel:tags:AppAssessment' :: AppAssessment -> Maybe (Sensitive (HashMap Text Text))
tags} -> Maybe (Sensitive (HashMap Text Text))
tags) (\s :: AppAssessment
s@AppAssessment' {} Maybe (Sensitive (HashMap Text Text))
a -> AppAssessment
s {$sel:tags:AppAssessment' :: Maybe (Sensitive (HashMap Text Text))
tags = Maybe (Sensitive (HashMap Text Text))
a} :: AppAssessment) 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. Iso' (Sensitive a) a
Data._Sensitive forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced)

-- | The Amazon Resource Name (ARN) of the assessment. The format for this
-- ARN is:
-- arn:@partition@:resiliencehub:@region@:@account@:app-assessment\/@app-id@.
-- For more information about ARNs, see
-- <https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs)>
-- in the /AWS General Reference/.
appAssessment_assessmentArn :: Lens.Lens' AppAssessment Prelude.Text
appAssessment_assessmentArn :: Lens' AppAssessment Text
appAssessment_assessmentArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AppAssessment' {Text
assessmentArn :: Text
$sel:assessmentArn:AppAssessment' :: AppAssessment -> Text
assessmentArn} -> Text
assessmentArn) (\s :: AppAssessment
s@AppAssessment' {} Text
a -> AppAssessment
s {$sel:assessmentArn:AppAssessment' :: Text
assessmentArn = Text
a} :: AppAssessment)

-- | The current status of the assessment for the resiliency policy.
appAssessment_assessmentStatus :: Lens.Lens' AppAssessment AssessmentStatus
appAssessment_assessmentStatus :: Lens' AppAssessment AssessmentStatus
appAssessment_assessmentStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AppAssessment' {AssessmentStatus
assessmentStatus :: AssessmentStatus
$sel:assessmentStatus:AppAssessment' :: AppAssessment -> AssessmentStatus
assessmentStatus} -> AssessmentStatus
assessmentStatus) (\s :: AppAssessment
s@AppAssessment' {} AssessmentStatus
a -> AppAssessment
s {$sel:assessmentStatus:AppAssessment' :: AssessmentStatus
assessmentStatus = AssessmentStatus
a} :: AppAssessment)

-- | The entity that invoked the assessment.
appAssessment_invoker :: Lens.Lens' AppAssessment AssessmentInvoker
appAssessment_invoker :: Lens' AppAssessment AssessmentInvoker
appAssessment_invoker = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\AppAssessment' {AssessmentInvoker
invoker :: AssessmentInvoker
$sel:invoker:AppAssessment' :: AppAssessment -> AssessmentInvoker
invoker} -> AssessmentInvoker
invoker) (\s :: AppAssessment
s@AppAssessment' {} AssessmentInvoker
a -> AppAssessment
s {$sel:invoker:AppAssessment' :: AssessmentInvoker
invoker = AssessmentInvoker
a} :: AppAssessment)

instance Data.FromJSON AppAssessment where
  parseJSON :: Value -> Parser AppAssessment
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"AppAssessment"
      ( \Object
x ->
          Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe (HashMap DisruptionType DisruptionCompliance)
-> Maybe ComplianceStatus
-> Maybe Cost
-> Maybe POSIX
-> Maybe Text
-> Maybe ResiliencyPolicy
-> Maybe ResiliencyScore
-> Maybe ResourceErrorsDetails
-> Maybe POSIX
-> Maybe (Sensitive (HashMap Text Text))
-> Text
-> AssessmentStatus
-> AssessmentInvoker
-> AppAssessment
AppAssessment'
            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
"appArn")
            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
"appVersion")
            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
"assessmentName")
            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
"compliance" 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
"complianceStatus")
            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
"cost")
            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
"endTime")
            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
"message")
            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
"policy")
            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
"resiliencyScore")
            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
"resourceErrorsDetails")
            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
"startTime")
            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)
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"assessmentArn")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"assessmentStatus")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"invoker")
      )

instance Prelude.Hashable AppAssessment where
  hashWithSalt :: Int -> AppAssessment -> Int
hashWithSalt Int
_salt AppAssessment' {Maybe Text
Maybe (HashMap DisruptionType DisruptionCompliance)
Maybe (Sensitive (HashMap Text Text))
Maybe POSIX
Maybe ComplianceStatus
Maybe Cost
Maybe ResiliencyPolicy
Maybe ResiliencyScore
Maybe ResourceErrorsDetails
Text
AssessmentInvoker
AssessmentStatus
invoker :: AssessmentInvoker
assessmentStatus :: AssessmentStatus
assessmentArn :: Text
tags :: Maybe (Sensitive (HashMap Text Text))
startTime :: Maybe POSIX
resourceErrorsDetails :: Maybe ResourceErrorsDetails
resiliencyScore :: Maybe ResiliencyScore
policy :: Maybe ResiliencyPolicy
message :: Maybe Text
endTime :: Maybe POSIX
cost :: Maybe Cost
complianceStatus :: Maybe ComplianceStatus
compliance :: Maybe (HashMap DisruptionType DisruptionCompliance)
assessmentName :: Maybe Text
appVersion :: Maybe Text
appArn :: Maybe Text
$sel:invoker:AppAssessment' :: AppAssessment -> AssessmentInvoker
$sel:assessmentStatus:AppAssessment' :: AppAssessment -> AssessmentStatus
$sel:assessmentArn:AppAssessment' :: AppAssessment -> Text
$sel:tags:AppAssessment' :: AppAssessment -> Maybe (Sensitive (HashMap Text Text))
$sel:startTime:AppAssessment' :: AppAssessment -> Maybe POSIX
$sel:resourceErrorsDetails:AppAssessment' :: AppAssessment -> Maybe ResourceErrorsDetails
$sel:resiliencyScore:AppAssessment' :: AppAssessment -> Maybe ResiliencyScore
$sel:policy:AppAssessment' :: AppAssessment -> Maybe ResiliencyPolicy
$sel:message:AppAssessment' :: AppAssessment -> Maybe Text
$sel:endTime:AppAssessment' :: AppAssessment -> Maybe POSIX
$sel:cost:AppAssessment' :: AppAssessment -> Maybe Cost
$sel:complianceStatus:AppAssessment' :: AppAssessment -> Maybe ComplianceStatus
$sel:compliance:AppAssessment' :: AppAssessment
-> Maybe (HashMap DisruptionType DisruptionCompliance)
$sel:assessmentName:AppAssessment' :: AppAssessment -> Maybe Text
$sel:appVersion:AppAssessment' :: AppAssessment -> Maybe Text
$sel:appArn:AppAssessment' :: AppAssessment -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
appArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
appVersion
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
assessmentName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap DisruptionType DisruptionCompliance)
compliance
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ComplianceStatus
complianceStatus
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Cost
cost
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
endTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
message
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ResiliencyPolicy
policy
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ResiliencyScore
resiliencyScore
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ResourceErrorsDetails
resourceErrorsDetails
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
startTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (Sensitive (HashMap Text Text))
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
assessmentArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` AssessmentStatus
assessmentStatus
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` AssessmentInvoker
invoker

instance Prelude.NFData AppAssessment where
  rnf :: AppAssessment -> ()
rnf AppAssessment' {Maybe Text
Maybe (HashMap DisruptionType DisruptionCompliance)
Maybe (Sensitive (HashMap Text Text))
Maybe POSIX
Maybe ComplianceStatus
Maybe Cost
Maybe ResiliencyPolicy
Maybe ResiliencyScore
Maybe ResourceErrorsDetails
Text
AssessmentInvoker
AssessmentStatus
invoker :: AssessmentInvoker
assessmentStatus :: AssessmentStatus
assessmentArn :: Text
tags :: Maybe (Sensitive (HashMap Text Text))
startTime :: Maybe POSIX
resourceErrorsDetails :: Maybe ResourceErrorsDetails
resiliencyScore :: Maybe ResiliencyScore
policy :: Maybe ResiliencyPolicy
message :: Maybe Text
endTime :: Maybe POSIX
cost :: Maybe Cost
complianceStatus :: Maybe ComplianceStatus
compliance :: Maybe (HashMap DisruptionType DisruptionCompliance)
assessmentName :: Maybe Text
appVersion :: Maybe Text
appArn :: Maybe Text
$sel:invoker:AppAssessment' :: AppAssessment -> AssessmentInvoker
$sel:assessmentStatus:AppAssessment' :: AppAssessment -> AssessmentStatus
$sel:assessmentArn:AppAssessment' :: AppAssessment -> Text
$sel:tags:AppAssessment' :: AppAssessment -> Maybe (Sensitive (HashMap Text Text))
$sel:startTime:AppAssessment' :: AppAssessment -> Maybe POSIX
$sel:resourceErrorsDetails:AppAssessment' :: AppAssessment -> Maybe ResourceErrorsDetails
$sel:resiliencyScore:AppAssessment' :: AppAssessment -> Maybe ResiliencyScore
$sel:policy:AppAssessment' :: AppAssessment -> Maybe ResiliencyPolicy
$sel:message:AppAssessment' :: AppAssessment -> Maybe Text
$sel:endTime:AppAssessment' :: AppAssessment -> Maybe POSIX
$sel:cost:AppAssessment' :: AppAssessment -> Maybe Cost
$sel:complianceStatus:AppAssessment' :: AppAssessment -> Maybe ComplianceStatus
$sel:compliance:AppAssessment' :: AppAssessment
-> Maybe (HashMap DisruptionType DisruptionCompliance)
$sel:assessmentName:AppAssessment' :: AppAssessment -> Maybe Text
$sel:appVersion:AppAssessment' :: AppAssessment -> Maybe Text
$sel:appArn:AppAssessment' :: AppAssessment -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
appArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
appVersion
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
assessmentName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (HashMap DisruptionType DisruptionCompliance)
compliance
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ComplianceStatus
complianceStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Cost
cost
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
endTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
message
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ResiliencyPolicy
policy
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ResiliencyScore
resiliencyScore
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ResourceErrorsDetails
resourceErrorsDetails
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
startTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (Sensitive (HashMap Text Text))
tags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
assessmentArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf AssessmentStatus
assessmentStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf AssessmentInvoker
invoker