{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.CodePipeline.PutJobFailureResult
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Represents the failure of a job as returned to the pipeline by a job
-- worker. Used for custom actions only.
module Amazonka.CodePipeline.PutJobFailureResult
  ( -- * Creating a Request
    PutJobFailureResult (..),
    newPutJobFailureResult,

    -- * Request Lenses
    putJobFailureResult_jobId,
    putJobFailureResult_failureDetails,

    -- * Destructuring the Response
    PutJobFailureResultResponse (..),
    newPutJobFailureResultResponse,
  )
where

import Amazonka.CodePipeline.Types
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 qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | Represents the input of a @PutJobFailureResult@ action.
--
-- /See:/ 'newPutJobFailureResult' smart constructor.
data PutJobFailureResult = PutJobFailureResult'
  { -- | The unique system-generated ID of the job that failed. This is the same
    -- ID returned from @PollForJobs@.
    PutJobFailureResult -> Text
jobId :: Prelude.Text,
    -- | The details about the failure of a job.
    PutJobFailureResult -> FailureDetails
failureDetails :: FailureDetails
  }
  deriving (PutJobFailureResult -> PutJobFailureResult -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PutJobFailureResult -> PutJobFailureResult -> Bool
$c/= :: PutJobFailureResult -> PutJobFailureResult -> Bool
== :: PutJobFailureResult -> PutJobFailureResult -> Bool
$c== :: PutJobFailureResult -> PutJobFailureResult -> Bool
Prelude.Eq, ReadPrec [PutJobFailureResult]
ReadPrec PutJobFailureResult
Int -> ReadS PutJobFailureResult
ReadS [PutJobFailureResult]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [PutJobFailureResult]
$creadListPrec :: ReadPrec [PutJobFailureResult]
readPrec :: ReadPrec PutJobFailureResult
$creadPrec :: ReadPrec PutJobFailureResult
readList :: ReadS [PutJobFailureResult]
$creadList :: ReadS [PutJobFailureResult]
readsPrec :: Int -> ReadS PutJobFailureResult
$creadsPrec :: Int -> ReadS PutJobFailureResult
Prelude.Read, Int -> PutJobFailureResult -> ShowS
[PutJobFailureResult] -> ShowS
PutJobFailureResult -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PutJobFailureResult] -> ShowS
$cshowList :: [PutJobFailureResult] -> ShowS
show :: PutJobFailureResult -> String
$cshow :: PutJobFailureResult -> String
showsPrec :: Int -> PutJobFailureResult -> ShowS
$cshowsPrec :: Int -> PutJobFailureResult -> ShowS
Prelude.Show, forall x. Rep PutJobFailureResult x -> PutJobFailureResult
forall x. PutJobFailureResult -> Rep PutJobFailureResult x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep PutJobFailureResult x -> PutJobFailureResult
$cfrom :: forall x. PutJobFailureResult -> Rep PutJobFailureResult x
Prelude.Generic)

-- |
-- Create a value of 'PutJobFailureResult' 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:
--
-- 'jobId', 'putJobFailureResult_jobId' - The unique system-generated ID of the job that failed. This is the same
-- ID returned from @PollForJobs@.
--
-- 'failureDetails', 'putJobFailureResult_failureDetails' - The details about the failure of a job.
newPutJobFailureResult ::
  -- | 'jobId'
  Prelude.Text ->
  -- | 'failureDetails'
  FailureDetails ->
  PutJobFailureResult
newPutJobFailureResult :: Text -> FailureDetails -> PutJobFailureResult
newPutJobFailureResult Text
pJobId_ FailureDetails
pFailureDetails_ =
  PutJobFailureResult'
    { $sel:jobId:PutJobFailureResult' :: Text
jobId = Text
pJobId_,
      $sel:failureDetails:PutJobFailureResult' :: FailureDetails
failureDetails = FailureDetails
pFailureDetails_
    }

-- | The unique system-generated ID of the job that failed. This is the same
-- ID returned from @PollForJobs@.
putJobFailureResult_jobId :: Lens.Lens' PutJobFailureResult Prelude.Text
putJobFailureResult_jobId :: Lens' PutJobFailureResult Text
putJobFailureResult_jobId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PutJobFailureResult' {Text
jobId :: Text
$sel:jobId:PutJobFailureResult' :: PutJobFailureResult -> Text
jobId} -> Text
jobId) (\s :: PutJobFailureResult
s@PutJobFailureResult' {} Text
a -> PutJobFailureResult
s {$sel:jobId:PutJobFailureResult' :: Text
jobId = Text
a} :: PutJobFailureResult)

-- | The details about the failure of a job.
putJobFailureResult_failureDetails :: Lens.Lens' PutJobFailureResult FailureDetails
putJobFailureResult_failureDetails :: Lens' PutJobFailureResult FailureDetails
putJobFailureResult_failureDetails = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PutJobFailureResult' {FailureDetails
failureDetails :: FailureDetails
$sel:failureDetails:PutJobFailureResult' :: PutJobFailureResult -> FailureDetails
failureDetails} -> FailureDetails
failureDetails) (\s :: PutJobFailureResult
s@PutJobFailureResult' {} FailureDetails
a -> PutJobFailureResult
s {$sel:failureDetails:PutJobFailureResult' :: FailureDetails
failureDetails = FailureDetails
a} :: PutJobFailureResult)

instance Core.AWSRequest PutJobFailureResult where
  type
    AWSResponse PutJobFailureResult =
      PutJobFailureResultResponse
  request :: (Service -> Service)
-> PutJobFailureResult -> Request PutJobFailureResult
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy PutJobFailureResult
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse PutJobFailureResult)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
AWSResponse a
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveNull PutJobFailureResultResponse
PutJobFailureResultResponse'

instance Prelude.Hashable PutJobFailureResult where
  hashWithSalt :: Int -> PutJobFailureResult -> Int
hashWithSalt Int
_salt PutJobFailureResult' {Text
FailureDetails
failureDetails :: FailureDetails
jobId :: Text
$sel:failureDetails:PutJobFailureResult' :: PutJobFailureResult -> FailureDetails
$sel:jobId:PutJobFailureResult' :: PutJobFailureResult -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
jobId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` FailureDetails
failureDetails

instance Prelude.NFData PutJobFailureResult where
  rnf :: PutJobFailureResult -> ()
rnf PutJobFailureResult' {Text
FailureDetails
failureDetails :: FailureDetails
jobId :: Text
$sel:failureDetails:PutJobFailureResult' :: PutJobFailureResult -> FailureDetails
$sel:jobId:PutJobFailureResult' :: PutJobFailureResult -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
jobId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf FailureDetails
failureDetails

instance Data.ToHeaders PutJobFailureResult where
  toHeaders :: PutJobFailureResult -> [Header]
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"X-Amz-Target"
              forall a. ToHeader a => HeaderName -> a -> [Header]
Data.=# ( ByteString
"CodePipeline_20150709.PutJobFailureResult" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> [Header]
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON PutJobFailureResult where
  toJSON :: PutJobFailureResult -> Value
toJSON PutJobFailureResult' {Text
FailureDetails
failureDetails :: FailureDetails
jobId :: Text
$sel:failureDetails:PutJobFailureResult' :: PutJobFailureResult -> FailureDetails
$sel:jobId:PutJobFailureResult' :: PutJobFailureResult -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just (Key
"jobId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
jobId),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"failureDetails" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= FailureDetails
failureDetails)
          ]
      )

instance Data.ToPath PutJobFailureResult where
  toPath :: PutJobFailureResult -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/"

instance Data.ToQuery PutJobFailureResult where
  toQuery :: PutJobFailureResult -> QueryString
toQuery = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

-- | /See:/ 'newPutJobFailureResultResponse' smart constructor.
data PutJobFailureResultResponse = PutJobFailureResultResponse'
  {
  }
  deriving (PutJobFailureResultResponse -> PutJobFailureResultResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PutJobFailureResultResponse -> PutJobFailureResultResponse -> Bool
$c/= :: PutJobFailureResultResponse -> PutJobFailureResultResponse -> Bool
== :: PutJobFailureResultResponse -> PutJobFailureResultResponse -> Bool
$c== :: PutJobFailureResultResponse -> PutJobFailureResultResponse -> Bool
Prelude.Eq, ReadPrec [PutJobFailureResultResponse]
ReadPrec PutJobFailureResultResponse
Int -> ReadS PutJobFailureResultResponse
ReadS [PutJobFailureResultResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [PutJobFailureResultResponse]
$creadListPrec :: ReadPrec [PutJobFailureResultResponse]
readPrec :: ReadPrec PutJobFailureResultResponse
$creadPrec :: ReadPrec PutJobFailureResultResponse
readList :: ReadS [PutJobFailureResultResponse]
$creadList :: ReadS [PutJobFailureResultResponse]
readsPrec :: Int -> ReadS PutJobFailureResultResponse
$creadsPrec :: Int -> ReadS PutJobFailureResultResponse
Prelude.Read, Int -> PutJobFailureResultResponse -> ShowS
[PutJobFailureResultResponse] -> ShowS
PutJobFailureResultResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PutJobFailureResultResponse] -> ShowS
$cshowList :: [PutJobFailureResultResponse] -> ShowS
show :: PutJobFailureResultResponse -> String
$cshow :: PutJobFailureResultResponse -> String
showsPrec :: Int -> PutJobFailureResultResponse -> ShowS
$cshowsPrec :: Int -> PutJobFailureResultResponse -> ShowS
Prelude.Show, forall x.
Rep PutJobFailureResultResponse x -> PutJobFailureResultResponse
forall x.
PutJobFailureResultResponse -> Rep PutJobFailureResultResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep PutJobFailureResultResponse x -> PutJobFailureResultResponse
$cfrom :: forall x.
PutJobFailureResultResponse -> Rep PutJobFailureResultResponse x
Prelude.Generic)

-- |
-- Create a value of 'PutJobFailureResultResponse' 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.
newPutJobFailureResultResponse ::
  PutJobFailureResultResponse
newPutJobFailureResultResponse :: PutJobFailureResultResponse
newPutJobFailureResultResponse =
  PutJobFailureResultResponse
PutJobFailureResultResponse'

instance Prelude.NFData PutJobFailureResultResponse where
  rnf :: PutJobFailureResultResponse -> ()
rnf PutJobFailureResultResponse
_ = ()