{-# 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.CodeCommit.Types.Approval
-- 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.CodeCommit.Types.Approval where

import Amazonka.CodeCommit.Types.ApprovalState
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

-- | Returns information about a specific approval on a pull request.
--
-- /See:/ 'newApproval' smart constructor.
data Approval = Approval'
  { -- | The state of the approval, APPROVE or REVOKE. REVOKE states are not
    -- stored.
    Approval -> Maybe ApprovalState
approvalState :: Prelude.Maybe ApprovalState,
    -- | The Amazon Resource Name (ARN) of the user.
    Approval -> Maybe Text
userArn :: Prelude.Maybe Prelude.Text
  }
  deriving (Approval -> Approval -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Approval -> Approval -> Bool
$c/= :: Approval -> Approval -> Bool
== :: Approval -> Approval -> Bool
$c== :: Approval -> Approval -> Bool
Prelude.Eq, ReadPrec [Approval]
ReadPrec Approval
Int -> ReadS Approval
ReadS [Approval]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Approval]
$creadListPrec :: ReadPrec [Approval]
readPrec :: ReadPrec Approval
$creadPrec :: ReadPrec Approval
readList :: ReadS [Approval]
$creadList :: ReadS [Approval]
readsPrec :: Int -> ReadS Approval
$creadsPrec :: Int -> ReadS Approval
Prelude.Read, Int -> Approval -> ShowS
[Approval] -> ShowS
Approval -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Approval] -> ShowS
$cshowList :: [Approval] -> ShowS
show :: Approval -> String
$cshow :: Approval -> String
showsPrec :: Int -> Approval -> ShowS
$cshowsPrec :: Int -> Approval -> ShowS
Prelude.Show, forall x. Rep Approval x -> Approval
forall x. Approval -> Rep Approval x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Approval x -> Approval
$cfrom :: forall x. Approval -> Rep Approval x
Prelude.Generic)

-- |
-- Create a value of 'Approval' 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:
--
-- 'approvalState', 'approval_approvalState' - The state of the approval, APPROVE or REVOKE. REVOKE states are not
-- stored.
--
-- 'userArn', 'approval_userArn' - The Amazon Resource Name (ARN) of the user.
newApproval ::
  Approval
newApproval :: Approval
newApproval =
  Approval'
    { $sel:approvalState:Approval' :: Maybe ApprovalState
approvalState = forall a. Maybe a
Prelude.Nothing,
      $sel:userArn:Approval' :: Maybe Text
userArn = forall a. Maybe a
Prelude.Nothing
    }

-- | The state of the approval, APPROVE or REVOKE. REVOKE states are not
-- stored.
approval_approvalState :: Lens.Lens' Approval (Prelude.Maybe ApprovalState)
approval_approvalState :: Lens' Approval (Maybe ApprovalState)
approval_approvalState = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Approval' {Maybe ApprovalState
approvalState :: Maybe ApprovalState
$sel:approvalState:Approval' :: Approval -> Maybe ApprovalState
approvalState} -> Maybe ApprovalState
approvalState) (\s :: Approval
s@Approval' {} Maybe ApprovalState
a -> Approval
s {$sel:approvalState:Approval' :: Maybe ApprovalState
approvalState = Maybe ApprovalState
a} :: Approval)

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

instance Data.FromJSON Approval where
  parseJSON :: Value -> Parser Approval
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"Approval"
      ( \Object
x ->
          Maybe ApprovalState -> Maybe Text -> Approval
Approval'
            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
"approvalState")
            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
"userArn")
      )

instance Prelude.Hashable Approval where
  hashWithSalt :: Int -> Approval -> Int
hashWithSalt Int
_salt Approval' {Maybe Text
Maybe ApprovalState
userArn :: Maybe Text
approvalState :: Maybe ApprovalState
$sel:userArn:Approval' :: Approval -> Maybe Text
$sel:approvalState:Approval' :: Approval -> Maybe ApprovalState
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ApprovalState
approvalState
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
userArn

instance Prelude.NFData Approval where
  rnf :: Approval -> ()
rnf Approval' {Maybe Text
Maybe ApprovalState
userArn :: Maybe Text
approvalState :: Maybe ApprovalState
$sel:userArn:Approval' :: Approval -> Maybe Text
$sel:approvalState:Approval' :: Approval -> Maybe ApprovalState
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe ApprovalState
approvalState
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
userArn