{-# 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.CodeGuruReviewer.Types.CodeReview
-- 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.CodeGuruReviewer.Types.CodeReview where

import Amazonka.CodeGuruReviewer.Types.AnalysisType
import Amazonka.CodeGuruReviewer.Types.ConfigFileState
import Amazonka.CodeGuruReviewer.Types.JobState
import Amazonka.CodeGuruReviewer.Types.Metrics
import Amazonka.CodeGuruReviewer.Types.ProviderType
import Amazonka.CodeGuruReviewer.Types.SourceCodeType
import Amazonka.CodeGuruReviewer.Types.Type
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

-- | Information about a code review. A code review belongs to the associated
-- repository that contains the reviewed code.
--
-- /See:/ 'newCodeReview' smart constructor.
data CodeReview = CodeReview'
  { -- | The types of analysis performed during a repository analysis or a pull
    -- request review. You can specify either @Security@, @CodeQuality@, or
    -- both.
    CodeReview -> Maybe [AnalysisType]
analysisTypes :: Prelude.Maybe [AnalysisType],
    -- | The Amazon Resource Name (ARN) of the
    -- <https://docs.aws.amazon.com/codeguru/latest/reviewer-api/API_RepositoryAssociation.html RepositoryAssociation>
    -- that contains the reviewed source code. You can retrieve associated
    -- repository ARNs by calling
    -- <https://docs.aws.amazon.com/codeguru/latest/reviewer-api/API_ListRepositoryAssociations.html ListRepositoryAssociations>.
    CodeReview -> Maybe Text
associationArn :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Resource Name (ARN) of the
    -- <https://docs.aws.amazon.com/codeguru/latest/reviewer-api/API_CodeReview.html CodeReview>
    -- object.
    CodeReview -> Maybe Text
codeReviewArn :: Prelude.Maybe Prelude.Text,
    -- | The state of the @aws-codeguru-reviewer.yml@ configuration file that
    -- allows the configuration of the CodeGuru Reviewer analysis. The file
    -- either exists, doesn\'t exist, or exists with errors at the root
    -- directory of your repository.
    CodeReview -> Maybe ConfigFileState
configFileState :: Prelude.Maybe ConfigFileState,
    -- | The time, in milliseconds since the epoch, when the code review was
    -- created.
    CodeReview -> Maybe POSIX
createdTimeStamp :: Prelude.Maybe Data.POSIX,
    -- | The time, in milliseconds since the epoch, when the code review was last
    -- updated.
    CodeReview -> Maybe POSIX
lastUpdatedTimeStamp :: Prelude.Maybe Data.POSIX,
    -- | The statistics from the code review.
    CodeReview -> Maybe Metrics
metrics :: Prelude.Maybe Metrics,
    -- | The name of the code review.
    CodeReview -> Maybe Text
name :: Prelude.Maybe Prelude.Text,
    -- | The owner of the repository. For an Amazon Web Services CodeCommit
    -- repository, this is the Amazon Web Services account ID of the account
    -- that owns the repository. For a GitHub, GitHub Enterprise Server, or
    -- Bitbucket repository, this is the username for the account that owns the
    -- repository. For an S3 repository, it can be the username or Amazon Web
    -- Services account ID.
    CodeReview -> Maybe Text
owner :: Prelude.Maybe Prelude.Text,
    -- | The type of repository that contains the reviewed code (for example,
    -- GitHub or Bitbucket).
    CodeReview -> Maybe ProviderType
providerType :: Prelude.Maybe ProviderType,
    -- | The pull request ID for the code review.
    CodeReview -> Maybe Text
pullRequestId :: Prelude.Maybe Prelude.Text,
    -- | The name of the repository.
    CodeReview -> Maybe Text
repositoryName :: Prelude.Maybe Prelude.Text,
    -- | The type of the source code for the code review.
    CodeReview -> Maybe SourceCodeType
sourceCodeType :: Prelude.Maybe SourceCodeType,
    -- | The valid code review states are:
    --
    -- -   @Completed@: The code review is complete.
    --
    -- -   @Pending@: The code review started and has not completed or failed.
    --
    -- -   @Failed@: The code review failed.
    --
    -- -   @Deleting@: The code review is being deleted.
    CodeReview -> Maybe JobState
state :: Prelude.Maybe JobState,
    -- | The reason for the state of the code review.
    CodeReview -> Maybe Text
stateReason :: Prelude.Maybe Prelude.Text,
    -- | The type of code review.
    CodeReview -> Maybe Type
type' :: Prelude.Maybe Type
  }
  deriving (CodeReview -> CodeReview -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CodeReview -> CodeReview -> Bool
$c/= :: CodeReview -> CodeReview -> Bool
== :: CodeReview -> CodeReview -> Bool
$c== :: CodeReview -> CodeReview -> Bool
Prelude.Eq, ReadPrec [CodeReview]
ReadPrec CodeReview
Int -> ReadS CodeReview
ReadS [CodeReview]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CodeReview]
$creadListPrec :: ReadPrec [CodeReview]
readPrec :: ReadPrec CodeReview
$creadPrec :: ReadPrec CodeReview
readList :: ReadS [CodeReview]
$creadList :: ReadS [CodeReview]
readsPrec :: Int -> ReadS CodeReview
$creadsPrec :: Int -> ReadS CodeReview
Prelude.Read, Int -> CodeReview -> ShowS
[CodeReview] -> ShowS
CodeReview -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CodeReview] -> ShowS
$cshowList :: [CodeReview] -> ShowS
show :: CodeReview -> String
$cshow :: CodeReview -> String
showsPrec :: Int -> CodeReview -> ShowS
$cshowsPrec :: Int -> CodeReview -> ShowS
Prelude.Show, forall x. Rep CodeReview x -> CodeReview
forall x. CodeReview -> Rep CodeReview x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CodeReview x -> CodeReview
$cfrom :: forall x. CodeReview -> Rep CodeReview x
Prelude.Generic)

-- |
-- Create a value of 'CodeReview' 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:
--
-- 'analysisTypes', 'codeReview_analysisTypes' - The types of analysis performed during a repository analysis or a pull
-- request review. You can specify either @Security@, @CodeQuality@, or
-- both.
--
-- 'associationArn', 'codeReview_associationArn' - The Amazon Resource Name (ARN) of the
-- <https://docs.aws.amazon.com/codeguru/latest/reviewer-api/API_RepositoryAssociation.html RepositoryAssociation>
-- that contains the reviewed source code. You can retrieve associated
-- repository ARNs by calling
-- <https://docs.aws.amazon.com/codeguru/latest/reviewer-api/API_ListRepositoryAssociations.html ListRepositoryAssociations>.
--
-- 'codeReviewArn', 'codeReview_codeReviewArn' - The Amazon Resource Name (ARN) of the
-- <https://docs.aws.amazon.com/codeguru/latest/reviewer-api/API_CodeReview.html CodeReview>
-- object.
--
-- 'configFileState', 'codeReview_configFileState' - The state of the @aws-codeguru-reviewer.yml@ configuration file that
-- allows the configuration of the CodeGuru Reviewer analysis. The file
-- either exists, doesn\'t exist, or exists with errors at the root
-- directory of your repository.
--
-- 'createdTimeStamp', 'codeReview_createdTimeStamp' - The time, in milliseconds since the epoch, when the code review was
-- created.
--
-- 'lastUpdatedTimeStamp', 'codeReview_lastUpdatedTimeStamp' - The time, in milliseconds since the epoch, when the code review was last
-- updated.
--
-- 'metrics', 'codeReview_metrics' - The statistics from the code review.
--
-- 'name', 'codeReview_name' - The name of the code review.
--
-- 'owner', 'codeReview_owner' - The owner of the repository. For an Amazon Web Services CodeCommit
-- repository, this is the Amazon Web Services account ID of the account
-- that owns the repository. For a GitHub, GitHub Enterprise Server, or
-- Bitbucket repository, this is the username for the account that owns the
-- repository. For an S3 repository, it can be the username or Amazon Web
-- Services account ID.
--
-- 'providerType', 'codeReview_providerType' - The type of repository that contains the reviewed code (for example,
-- GitHub or Bitbucket).
--
-- 'pullRequestId', 'codeReview_pullRequestId' - The pull request ID for the code review.
--
-- 'repositoryName', 'codeReview_repositoryName' - The name of the repository.
--
-- 'sourceCodeType', 'codeReview_sourceCodeType' - The type of the source code for the code review.
--
-- 'state', 'codeReview_state' - The valid code review states are:
--
-- -   @Completed@: The code review is complete.
--
-- -   @Pending@: The code review started and has not completed or failed.
--
-- -   @Failed@: The code review failed.
--
-- -   @Deleting@: The code review is being deleted.
--
-- 'stateReason', 'codeReview_stateReason' - The reason for the state of the code review.
--
-- 'type'', 'codeReview_type' - The type of code review.
newCodeReview ::
  CodeReview
newCodeReview :: CodeReview
newCodeReview =
  CodeReview'
    { $sel:analysisTypes:CodeReview' :: Maybe [AnalysisType]
analysisTypes = forall a. Maybe a
Prelude.Nothing,
      $sel:associationArn:CodeReview' :: Maybe Text
associationArn = forall a. Maybe a
Prelude.Nothing,
      $sel:codeReviewArn:CodeReview' :: Maybe Text
codeReviewArn = forall a. Maybe a
Prelude.Nothing,
      $sel:configFileState:CodeReview' :: Maybe ConfigFileState
configFileState = forall a. Maybe a
Prelude.Nothing,
      $sel:createdTimeStamp:CodeReview' :: Maybe POSIX
createdTimeStamp = forall a. Maybe a
Prelude.Nothing,
      $sel:lastUpdatedTimeStamp:CodeReview' :: Maybe POSIX
lastUpdatedTimeStamp = forall a. Maybe a
Prelude.Nothing,
      $sel:metrics:CodeReview' :: Maybe Metrics
metrics = forall a. Maybe a
Prelude.Nothing,
      $sel:name:CodeReview' :: Maybe Text
name = forall a. Maybe a
Prelude.Nothing,
      $sel:owner:CodeReview' :: Maybe Text
owner = forall a. Maybe a
Prelude.Nothing,
      $sel:providerType:CodeReview' :: Maybe ProviderType
providerType = forall a. Maybe a
Prelude.Nothing,
      $sel:pullRequestId:CodeReview' :: Maybe Text
pullRequestId = forall a. Maybe a
Prelude.Nothing,
      $sel:repositoryName:CodeReview' :: Maybe Text
repositoryName = forall a. Maybe a
Prelude.Nothing,
      $sel:sourceCodeType:CodeReview' :: Maybe SourceCodeType
sourceCodeType = forall a. Maybe a
Prelude.Nothing,
      $sel:state:CodeReview' :: Maybe JobState
state = forall a. Maybe a
Prelude.Nothing,
      $sel:stateReason:CodeReview' :: Maybe Text
stateReason = forall a. Maybe a
Prelude.Nothing,
      $sel:type':CodeReview' :: Maybe Type
type' = forall a. Maybe a
Prelude.Nothing
    }

-- | The types of analysis performed during a repository analysis or a pull
-- request review. You can specify either @Security@, @CodeQuality@, or
-- both.
codeReview_analysisTypes :: Lens.Lens' CodeReview (Prelude.Maybe [AnalysisType])
codeReview_analysisTypes :: Lens' CodeReview (Maybe [AnalysisType])
codeReview_analysisTypes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CodeReview' {Maybe [AnalysisType]
analysisTypes :: Maybe [AnalysisType]
$sel:analysisTypes:CodeReview' :: CodeReview -> Maybe [AnalysisType]
analysisTypes} -> Maybe [AnalysisType]
analysisTypes) (\s :: CodeReview
s@CodeReview' {} Maybe [AnalysisType]
a -> CodeReview
s {$sel:analysisTypes:CodeReview' :: Maybe [AnalysisType]
analysisTypes = Maybe [AnalysisType]
a} :: CodeReview) 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 Amazon Resource Name (ARN) of the
-- <https://docs.aws.amazon.com/codeguru/latest/reviewer-api/API_RepositoryAssociation.html RepositoryAssociation>
-- that contains the reviewed source code. You can retrieve associated
-- repository ARNs by calling
-- <https://docs.aws.amazon.com/codeguru/latest/reviewer-api/API_ListRepositoryAssociations.html ListRepositoryAssociations>.
codeReview_associationArn :: Lens.Lens' CodeReview (Prelude.Maybe Prelude.Text)
codeReview_associationArn :: Lens' CodeReview (Maybe Text)
codeReview_associationArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CodeReview' {Maybe Text
associationArn :: Maybe Text
$sel:associationArn:CodeReview' :: CodeReview -> Maybe Text
associationArn} -> Maybe Text
associationArn) (\s :: CodeReview
s@CodeReview' {} Maybe Text
a -> CodeReview
s {$sel:associationArn:CodeReview' :: Maybe Text
associationArn = Maybe Text
a} :: CodeReview)

-- | The Amazon Resource Name (ARN) of the
-- <https://docs.aws.amazon.com/codeguru/latest/reviewer-api/API_CodeReview.html CodeReview>
-- object.
codeReview_codeReviewArn :: Lens.Lens' CodeReview (Prelude.Maybe Prelude.Text)
codeReview_codeReviewArn :: Lens' CodeReview (Maybe Text)
codeReview_codeReviewArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CodeReview' {Maybe Text
codeReviewArn :: Maybe Text
$sel:codeReviewArn:CodeReview' :: CodeReview -> Maybe Text
codeReviewArn} -> Maybe Text
codeReviewArn) (\s :: CodeReview
s@CodeReview' {} Maybe Text
a -> CodeReview
s {$sel:codeReviewArn:CodeReview' :: Maybe Text
codeReviewArn = Maybe Text
a} :: CodeReview)

-- | The state of the @aws-codeguru-reviewer.yml@ configuration file that
-- allows the configuration of the CodeGuru Reviewer analysis. The file
-- either exists, doesn\'t exist, or exists with errors at the root
-- directory of your repository.
codeReview_configFileState :: Lens.Lens' CodeReview (Prelude.Maybe ConfigFileState)
codeReview_configFileState :: Lens' CodeReview (Maybe ConfigFileState)
codeReview_configFileState = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CodeReview' {Maybe ConfigFileState
configFileState :: Maybe ConfigFileState
$sel:configFileState:CodeReview' :: CodeReview -> Maybe ConfigFileState
configFileState} -> Maybe ConfigFileState
configFileState) (\s :: CodeReview
s@CodeReview' {} Maybe ConfigFileState
a -> CodeReview
s {$sel:configFileState:CodeReview' :: Maybe ConfigFileState
configFileState = Maybe ConfigFileState
a} :: CodeReview)

-- | The time, in milliseconds since the epoch, when the code review was
-- created.
codeReview_createdTimeStamp :: Lens.Lens' CodeReview (Prelude.Maybe Prelude.UTCTime)
codeReview_createdTimeStamp :: Lens' CodeReview (Maybe UTCTime)
codeReview_createdTimeStamp = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CodeReview' {Maybe POSIX
createdTimeStamp :: Maybe POSIX
$sel:createdTimeStamp:CodeReview' :: CodeReview -> Maybe POSIX
createdTimeStamp} -> Maybe POSIX
createdTimeStamp) (\s :: CodeReview
s@CodeReview' {} Maybe POSIX
a -> CodeReview
s {$sel:createdTimeStamp:CodeReview' :: Maybe POSIX
createdTimeStamp = Maybe POSIX
a} :: CodeReview) 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 time, in milliseconds since the epoch, when the code review was last
-- updated.
codeReview_lastUpdatedTimeStamp :: Lens.Lens' CodeReview (Prelude.Maybe Prelude.UTCTime)
codeReview_lastUpdatedTimeStamp :: Lens' CodeReview (Maybe UTCTime)
codeReview_lastUpdatedTimeStamp = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CodeReview' {Maybe POSIX
lastUpdatedTimeStamp :: Maybe POSIX
$sel:lastUpdatedTimeStamp:CodeReview' :: CodeReview -> Maybe POSIX
lastUpdatedTimeStamp} -> Maybe POSIX
lastUpdatedTimeStamp) (\s :: CodeReview
s@CodeReview' {} Maybe POSIX
a -> CodeReview
s {$sel:lastUpdatedTimeStamp:CodeReview' :: Maybe POSIX
lastUpdatedTimeStamp = Maybe POSIX
a} :: CodeReview) 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 statistics from the code review.
codeReview_metrics :: Lens.Lens' CodeReview (Prelude.Maybe Metrics)
codeReview_metrics :: Lens' CodeReview (Maybe Metrics)
codeReview_metrics = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CodeReview' {Maybe Metrics
metrics :: Maybe Metrics
$sel:metrics:CodeReview' :: CodeReview -> Maybe Metrics
metrics} -> Maybe Metrics
metrics) (\s :: CodeReview
s@CodeReview' {} Maybe Metrics
a -> CodeReview
s {$sel:metrics:CodeReview' :: Maybe Metrics
metrics = Maybe Metrics
a} :: CodeReview)

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

-- | The owner of the repository. For an Amazon Web Services CodeCommit
-- repository, this is the Amazon Web Services account ID of the account
-- that owns the repository. For a GitHub, GitHub Enterprise Server, or
-- Bitbucket repository, this is the username for the account that owns the
-- repository. For an S3 repository, it can be the username or Amazon Web
-- Services account ID.
codeReview_owner :: Lens.Lens' CodeReview (Prelude.Maybe Prelude.Text)
codeReview_owner :: Lens' CodeReview (Maybe Text)
codeReview_owner = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CodeReview' {Maybe Text
owner :: Maybe Text
$sel:owner:CodeReview' :: CodeReview -> Maybe Text
owner} -> Maybe Text
owner) (\s :: CodeReview
s@CodeReview' {} Maybe Text
a -> CodeReview
s {$sel:owner:CodeReview' :: Maybe Text
owner = Maybe Text
a} :: CodeReview)

-- | The type of repository that contains the reviewed code (for example,
-- GitHub or Bitbucket).
codeReview_providerType :: Lens.Lens' CodeReview (Prelude.Maybe ProviderType)
codeReview_providerType :: Lens' CodeReview (Maybe ProviderType)
codeReview_providerType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CodeReview' {Maybe ProviderType
providerType :: Maybe ProviderType
$sel:providerType:CodeReview' :: CodeReview -> Maybe ProviderType
providerType} -> Maybe ProviderType
providerType) (\s :: CodeReview
s@CodeReview' {} Maybe ProviderType
a -> CodeReview
s {$sel:providerType:CodeReview' :: Maybe ProviderType
providerType = Maybe ProviderType
a} :: CodeReview)

-- | The pull request ID for the code review.
codeReview_pullRequestId :: Lens.Lens' CodeReview (Prelude.Maybe Prelude.Text)
codeReview_pullRequestId :: Lens' CodeReview (Maybe Text)
codeReview_pullRequestId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CodeReview' {Maybe Text
pullRequestId :: Maybe Text
$sel:pullRequestId:CodeReview' :: CodeReview -> Maybe Text
pullRequestId} -> Maybe Text
pullRequestId) (\s :: CodeReview
s@CodeReview' {} Maybe Text
a -> CodeReview
s {$sel:pullRequestId:CodeReview' :: Maybe Text
pullRequestId = Maybe Text
a} :: CodeReview)

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

-- | The type of the source code for the code review.
codeReview_sourceCodeType :: Lens.Lens' CodeReview (Prelude.Maybe SourceCodeType)
codeReview_sourceCodeType :: Lens' CodeReview (Maybe SourceCodeType)
codeReview_sourceCodeType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CodeReview' {Maybe SourceCodeType
sourceCodeType :: Maybe SourceCodeType
$sel:sourceCodeType:CodeReview' :: CodeReview -> Maybe SourceCodeType
sourceCodeType} -> Maybe SourceCodeType
sourceCodeType) (\s :: CodeReview
s@CodeReview' {} Maybe SourceCodeType
a -> CodeReview
s {$sel:sourceCodeType:CodeReview' :: Maybe SourceCodeType
sourceCodeType = Maybe SourceCodeType
a} :: CodeReview)

-- | The valid code review states are:
--
-- -   @Completed@: The code review is complete.
--
-- -   @Pending@: The code review started and has not completed or failed.
--
-- -   @Failed@: The code review failed.
--
-- -   @Deleting@: The code review is being deleted.
codeReview_state :: Lens.Lens' CodeReview (Prelude.Maybe JobState)
codeReview_state :: Lens' CodeReview (Maybe JobState)
codeReview_state = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CodeReview' {Maybe JobState
state :: Maybe JobState
$sel:state:CodeReview' :: CodeReview -> Maybe JobState
state} -> Maybe JobState
state) (\s :: CodeReview
s@CodeReview' {} Maybe JobState
a -> CodeReview
s {$sel:state:CodeReview' :: Maybe JobState
state = Maybe JobState
a} :: CodeReview)

-- | The reason for the state of the code review.
codeReview_stateReason :: Lens.Lens' CodeReview (Prelude.Maybe Prelude.Text)
codeReview_stateReason :: Lens' CodeReview (Maybe Text)
codeReview_stateReason = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CodeReview' {Maybe Text
stateReason :: Maybe Text
$sel:stateReason:CodeReview' :: CodeReview -> Maybe Text
stateReason} -> Maybe Text
stateReason) (\s :: CodeReview
s@CodeReview' {} Maybe Text
a -> CodeReview
s {$sel:stateReason:CodeReview' :: Maybe Text
stateReason = Maybe Text
a} :: CodeReview)

-- | The type of code review.
codeReview_type :: Lens.Lens' CodeReview (Prelude.Maybe Type)
codeReview_type :: Lens' CodeReview (Maybe Type)
codeReview_type = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CodeReview' {Maybe Type
type' :: Maybe Type
$sel:type':CodeReview' :: CodeReview -> Maybe Type
type'} -> Maybe Type
type') (\s :: CodeReview
s@CodeReview' {} Maybe Type
a -> CodeReview
s {$sel:type':CodeReview' :: Maybe Type
type' = Maybe Type
a} :: CodeReview)

instance Data.FromJSON CodeReview where
  parseJSON :: Value -> Parser CodeReview
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"CodeReview"
      ( \Object
x ->
          Maybe [AnalysisType]
-> Maybe Text
-> Maybe Text
-> Maybe ConfigFileState
-> Maybe POSIX
-> Maybe POSIX
-> Maybe Metrics
-> Maybe Text
-> Maybe Text
-> Maybe ProviderType
-> Maybe Text
-> Maybe Text
-> Maybe SourceCodeType
-> Maybe JobState
-> Maybe Text
-> Maybe Type
-> CodeReview
CodeReview'
            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
"AnalysisTypes" 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
"AssociationArn")
            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
"CodeReviewArn")
            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
"ConfigFileState")
            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
"CreatedTimeStamp")
            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
"LastUpdatedTimeStamp")
            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
"Metrics")
            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
"Owner")
            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
"ProviderType")
            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
"PullRequestId")
            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
"RepositoryName")
            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
"SourceCodeType")
            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
"State")
            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
"StateReason")
            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
"Type")
      )

instance Prelude.Hashable CodeReview where
  hashWithSalt :: Int -> CodeReview -> Int
hashWithSalt Int
_salt CodeReview' {Maybe [AnalysisType]
Maybe Text
Maybe POSIX
Maybe ConfigFileState
Maybe JobState
Maybe Metrics
Maybe ProviderType
Maybe Type
Maybe SourceCodeType
type' :: Maybe Type
stateReason :: Maybe Text
state :: Maybe JobState
sourceCodeType :: Maybe SourceCodeType
repositoryName :: Maybe Text
pullRequestId :: Maybe Text
providerType :: Maybe ProviderType
owner :: Maybe Text
name :: Maybe Text
metrics :: Maybe Metrics
lastUpdatedTimeStamp :: Maybe POSIX
createdTimeStamp :: Maybe POSIX
configFileState :: Maybe ConfigFileState
codeReviewArn :: Maybe Text
associationArn :: Maybe Text
analysisTypes :: Maybe [AnalysisType]
$sel:type':CodeReview' :: CodeReview -> Maybe Type
$sel:stateReason:CodeReview' :: CodeReview -> Maybe Text
$sel:state:CodeReview' :: CodeReview -> Maybe JobState
$sel:sourceCodeType:CodeReview' :: CodeReview -> Maybe SourceCodeType
$sel:repositoryName:CodeReview' :: CodeReview -> Maybe Text
$sel:pullRequestId:CodeReview' :: CodeReview -> Maybe Text
$sel:providerType:CodeReview' :: CodeReview -> Maybe ProviderType
$sel:owner:CodeReview' :: CodeReview -> Maybe Text
$sel:name:CodeReview' :: CodeReview -> Maybe Text
$sel:metrics:CodeReview' :: CodeReview -> Maybe Metrics
$sel:lastUpdatedTimeStamp:CodeReview' :: CodeReview -> Maybe POSIX
$sel:createdTimeStamp:CodeReview' :: CodeReview -> Maybe POSIX
$sel:configFileState:CodeReview' :: CodeReview -> Maybe ConfigFileState
$sel:codeReviewArn:CodeReview' :: CodeReview -> Maybe Text
$sel:associationArn:CodeReview' :: CodeReview -> Maybe Text
$sel:analysisTypes:CodeReview' :: CodeReview -> Maybe [AnalysisType]
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [AnalysisType]
analysisTypes
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
associationArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
codeReviewArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ConfigFileState
configFileState
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
createdTimeStamp
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
lastUpdatedTimeStamp
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Metrics
metrics
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
name
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
owner
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ProviderType
providerType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
pullRequestId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
repositoryName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe SourceCodeType
sourceCodeType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe JobState
state
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
stateReason
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Type
type'

instance Prelude.NFData CodeReview where
  rnf :: CodeReview -> ()
rnf CodeReview' {Maybe [AnalysisType]
Maybe Text
Maybe POSIX
Maybe ConfigFileState
Maybe JobState
Maybe Metrics
Maybe ProviderType
Maybe Type
Maybe SourceCodeType
type' :: Maybe Type
stateReason :: Maybe Text
state :: Maybe JobState
sourceCodeType :: Maybe SourceCodeType
repositoryName :: Maybe Text
pullRequestId :: Maybe Text
providerType :: Maybe ProviderType
owner :: Maybe Text
name :: Maybe Text
metrics :: Maybe Metrics
lastUpdatedTimeStamp :: Maybe POSIX
createdTimeStamp :: Maybe POSIX
configFileState :: Maybe ConfigFileState
codeReviewArn :: Maybe Text
associationArn :: Maybe Text
analysisTypes :: Maybe [AnalysisType]
$sel:type':CodeReview' :: CodeReview -> Maybe Type
$sel:stateReason:CodeReview' :: CodeReview -> Maybe Text
$sel:state:CodeReview' :: CodeReview -> Maybe JobState
$sel:sourceCodeType:CodeReview' :: CodeReview -> Maybe SourceCodeType
$sel:repositoryName:CodeReview' :: CodeReview -> Maybe Text
$sel:pullRequestId:CodeReview' :: CodeReview -> Maybe Text
$sel:providerType:CodeReview' :: CodeReview -> Maybe ProviderType
$sel:owner:CodeReview' :: CodeReview -> Maybe Text
$sel:name:CodeReview' :: CodeReview -> Maybe Text
$sel:metrics:CodeReview' :: CodeReview -> Maybe Metrics
$sel:lastUpdatedTimeStamp:CodeReview' :: CodeReview -> Maybe POSIX
$sel:createdTimeStamp:CodeReview' :: CodeReview -> Maybe POSIX
$sel:configFileState:CodeReview' :: CodeReview -> Maybe ConfigFileState
$sel:codeReviewArn:CodeReview' :: CodeReview -> Maybe Text
$sel:associationArn:CodeReview' :: CodeReview -> Maybe Text
$sel:analysisTypes:CodeReview' :: CodeReview -> Maybe [AnalysisType]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [AnalysisType]
analysisTypes
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
associationArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
codeReviewArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ConfigFileState
configFileState
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
createdTimeStamp
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
lastUpdatedTimeStamp
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Metrics
metrics
      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 Text
owner
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ProviderType
providerType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
pullRequestId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
repositoryName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe SourceCodeType
sourceCodeType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe JobState
state
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
stateReason
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Type
type'