{-# 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.Inspector2.Types.ResourceStatus
-- 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.Inspector2.Types.ResourceStatus where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.Inspector2.Types.Status
import qualified Amazonka.Prelude as Prelude

-- | Details the status of Amazon Inspector for each resource type Amazon
-- Inspector scans.
--
-- /See:/ 'newResourceStatus' smart constructor.
data ResourceStatus = ResourceStatus'
  { -- | The status of Amazon Inspector scanning for AWS Lambda function
    -- resources.
    ResourceStatus -> Maybe Status
lambda :: Prelude.Maybe Status,
    -- | The status of Amazon Inspector scanning for Amazon EC2 resources.
    ResourceStatus -> Status
ec2 :: Status,
    -- | The status of Amazon Inspector scanning for Amazon ECR resources.
    ResourceStatus -> Status
ecr :: Status
  }
  deriving (ResourceStatus -> ResourceStatus -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ResourceStatus -> ResourceStatus -> Bool
$c/= :: ResourceStatus -> ResourceStatus -> Bool
== :: ResourceStatus -> ResourceStatus -> Bool
$c== :: ResourceStatus -> ResourceStatus -> Bool
Prelude.Eq, ReadPrec [ResourceStatus]
ReadPrec ResourceStatus
Int -> ReadS ResourceStatus
ReadS [ResourceStatus]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ResourceStatus]
$creadListPrec :: ReadPrec [ResourceStatus]
readPrec :: ReadPrec ResourceStatus
$creadPrec :: ReadPrec ResourceStatus
readList :: ReadS [ResourceStatus]
$creadList :: ReadS [ResourceStatus]
readsPrec :: Int -> ReadS ResourceStatus
$creadsPrec :: Int -> ReadS ResourceStatus
Prelude.Read, Int -> ResourceStatus -> ShowS
[ResourceStatus] -> ShowS
ResourceStatus -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ResourceStatus] -> ShowS
$cshowList :: [ResourceStatus] -> ShowS
show :: ResourceStatus -> String
$cshow :: ResourceStatus -> String
showsPrec :: Int -> ResourceStatus -> ShowS
$cshowsPrec :: Int -> ResourceStatus -> ShowS
Prelude.Show, forall x. Rep ResourceStatus x -> ResourceStatus
forall x. ResourceStatus -> Rep ResourceStatus x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ResourceStatus x -> ResourceStatus
$cfrom :: forall x. ResourceStatus -> Rep ResourceStatus x
Prelude.Generic)

-- |
-- Create a value of 'ResourceStatus' 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:
--
-- 'lambda', 'resourceStatus_lambda' - The status of Amazon Inspector scanning for AWS Lambda function
-- resources.
--
-- 'ec2', 'resourceStatus_ec2' - The status of Amazon Inspector scanning for Amazon EC2 resources.
--
-- 'ecr', 'resourceStatus_ecr' - The status of Amazon Inspector scanning for Amazon ECR resources.
newResourceStatus ::
  -- | 'ec2'
  Status ->
  -- | 'ecr'
  Status ->
  ResourceStatus
newResourceStatus :: Status -> Status -> ResourceStatus
newResourceStatus Status
pEc2_ Status
pEcr_ =
  ResourceStatus'
    { $sel:lambda:ResourceStatus' :: Maybe Status
lambda = forall a. Maybe a
Prelude.Nothing,
      $sel:ec2:ResourceStatus' :: Status
ec2 = Status
pEc2_,
      $sel:ecr:ResourceStatus' :: Status
ecr = Status
pEcr_
    }

-- | The status of Amazon Inspector scanning for AWS Lambda function
-- resources.
resourceStatus_lambda :: Lens.Lens' ResourceStatus (Prelude.Maybe Status)
resourceStatus_lambda :: Lens' ResourceStatus (Maybe Status)
resourceStatus_lambda = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ResourceStatus' {Maybe Status
lambda :: Maybe Status
$sel:lambda:ResourceStatus' :: ResourceStatus -> Maybe Status
lambda} -> Maybe Status
lambda) (\s :: ResourceStatus
s@ResourceStatus' {} Maybe Status
a -> ResourceStatus
s {$sel:lambda:ResourceStatus' :: Maybe Status
lambda = Maybe Status
a} :: ResourceStatus)

-- | The status of Amazon Inspector scanning for Amazon EC2 resources.
resourceStatus_ec2 :: Lens.Lens' ResourceStatus Status
resourceStatus_ec2 :: Lens' ResourceStatus Status
resourceStatus_ec2 = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ResourceStatus' {Status
ec2 :: Status
$sel:ec2:ResourceStatus' :: ResourceStatus -> Status
ec2} -> Status
ec2) (\s :: ResourceStatus
s@ResourceStatus' {} Status
a -> ResourceStatus
s {$sel:ec2:ResourceStatus' :: Status
ec2 = Status
a} :: ResourceStatus)

-- | The status of Amazon Inspector scanning for Amazon ECR resources.
resourceStatus_ecr :: Lens.Lens' ResourceStatus Status
resourceStatus_ecr :: Lens' ResourceStatus Status
resourceStatus_ecr = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ResourceStatus' {Status
ecr :: Status
$sel:ecr:ResourceStatus' :: ResourceStatus -> Status
ecr} -> Status
ecr) (\s :: ResourceStatus
s@ResourceStatus' {} Status
a -> ResourceStatus
s {$sel:ecr:ResourceStatus' :: Status
ecr = Status
a} :: ResourceStatus)

instance Data.FromJSON ResourceStatus where
  parseJSON :: Value -> Parser ResourceStatus
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"ResourceStatus"
      ( \Object
x ->
          Maybe Status -> Status -> Status -> ResourceStatus
ResourceStatus'
            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
"lambda")
            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
"ec2")
            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
"ecr")
      )

instance Prelude.Hashable ResourceStatus where
  hashWithSalt :: Int -> ResourceStatus -> Int
hashWithSalt Int
_salt ResourceStatus' {Maybe Status
Status
ecr :: Status
ec2 :: Status
lambda :: Maybe Status
$sel:ecr:ResourceStatus' :: ResourceStatus -> Status
$sel:ec2:ResourceStatus' :: ResourceStatus -> Status
$sel:lambda:ResourceStatus' :: ResourceStatus -> Maybe Status
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Status
lambda
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Status
ec2
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Status
ecr

instance Prelude.NFData ResourceStatus where
  rnf :: ResourceStatus -> ()
rnf ResourceStatus' {Maybe Status
Status
ecr :: Status
ec2 :: Status
lambda :: Maybe Status
$sel:ecr:ResourceStatus' :: ResourceStatus -> Status
$sel:ec2:ResourceStatus' :: ResourceStatus -> Status
$sel:lambda:ResourceStatus' :: ResourceStatus -> Maybe Status
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Status
lambda
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Status
ec2
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Status
ecr