{-# 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.IoTJobsData.UpdateJobExecution
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Updates the status of a job execution.
module Amazonka.IoTJobsData.UpdateJobExecution
  ( -- * Creating a Request
    UpdateJobExecution (..),
    newUpdateJobExecution,

    -- * Request Lenses
    updateJobExecution_executionNumber,
    updateJobExecution_expectedVersion,
    updateJobExecution_includeJobDocument,
    updateJobExecution_includeJobExecutionState,
    updateJobExecution_statusDetails,
    updateJobExecution_stepTimeoutInMinutes,
    updateJobExecution_jobId,
    updateJobExecution_thingName,
    updateJobExecution_status,

    -- * Destructuring the Response
    UpdateJobExecutionResponse (..),
    newUpdateJobExecutionResponse,

    -- * Response Lenses
    updateJobExecutionResponse_executionState,
    updateJobExecutionResponse_jobDocument,
    updateJobExecutionResponse_httpStatus,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.IoTJobsData.Types
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newUpdateJobExecution' smart constructor.
data UpdateJobExecution = UpdateJobExecution'
  { -- | Optional. A number that identifies a particular job execution on a
    -- particular device.
    UpdateJobExecution -> Maybe Integer
executionNumber :: Prelude.Maybe Prelude.Integer,
    -- | Optional. The expected current version of the job execution. Each time
    -- you update the job execution, its version is incremented. If the version
    -- of the job execution stored in Jobs does not match, the update is
    -- rejected with a VersionMismatch error, and an ErrorResponse that
    -- contains the current job execution status data is returned. (This makes
    -- it unnecessary to perform a separate DescribeJobExecution request in
    -- order to obtain the job execution status data.)
    UpdateJobExecution -> Maybe Integer
expectedVersion :: Prelude.Maybe Prelude.Integer,
    -- | Optional. When set to true, the response contains the job document. The
    -- default is false.
    UpdateJobExecution -> Maybe Bool
includeJobDocument :: Prelude.Maybe Prelude.Bool,
    -- | Optional. When included and set to true, the response contains the
    -- JobExecutionState data. The default is false.
    UpdateJobExecution -> Maybe Bool
includeJobExecutionState :: Prelude.Maybe Prelude.Bool,
    -- | Optional. A collection of name\/value pairs that describe the status of
    -- the job execution. If not specified, the statusDetails are unchanged.
    UpdateJobExecution -> Maybe (HashMap Text Text)
statusDetails :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
    -- | Specifies the amount of time this device has to finish execution of this
    -- job. If the job execution status is not set to a terminal state before
    -- this timer expires, or before the timer is reset (by again calling
    -- @UpdateJobExecution@, setting the status to @IN_PROGRESS@ and specifying
    -- a new timeout value in this field) the job execution status will be
    -- automatically set to @TIMED_OUT@. Note that setting or resetting this
    -- timeout has no effect on that job execution timeout which may have been
    -- specified when the job was created (@CreateJob@ using field
    -- @timeoutConfig@).
    UpdateJobExecution -> Maybe Integer
stepTimeoutInMinutes :: Prelude.Maybe Prelude.Integer,
    -- | The unique identifier assigned to this job when it was created.
    UpdateJobExecution -> Text
jobId :: Prelude.Text,
    -- | The name of the thing associated with the device.
    UpdateJobExecution -> Text
thingName :: Prelude.Text,
    -- | The new status for the job execution (IN_PROGRESS, FAILED, SUCCESS, or
    -- REJECTED). This must be specified on every update.
    UpdateJobExecution -> JobExecutionStatus
status :: JobExecutionStatus
  }
  deriving (UpdateJobExecution -> UpdateJobExecution -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateJobExecution -> UpdateJobExecution -> Bool
$c/= :: UpdateJobExecution -> UpdateJobExecution -> Bool
== :: UpdateJobExecution -> UpdateJobExecution -> Bool
$c== :: UpdateJobExecution -> UpdateJobExecution -> Bool
Prelude.Eq, ReadPrec [UpdateJobExecution]
ReadPrec UpdateJobExecution
Int -> ReadS UpdateJobExecution
ReadS [UpdateJobExecution]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateJobExecution]
$creadListPrec :: ReadPrec [UpdateJobExecution]
readPrec :: ReadPrec UpdateJobExecution
$creadPrec :: ReadPrec UpdateJobExecution
readList :: ReadS [UpdateJobExecution]
$creadList :: ReadS [UpdateJobExecution]
readsPrec :: Int -> ReadS UpdateJobExecution
$creadsPrec :: Int -> ReadS UpdateJobExecution
Prelude.Read, Int -> UpdateJobExecution -> ShowS
[UpdateJobExecution] -> ShowS
UpdateJobExecution -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateJobExecution] -> ShowS
$cshowList :: [UpdateJobExecution] -> ShowS
show :: UpdateJobExecution -> String
$cshow :: UpdateJobExecution -> String
showsPrec :: Int -> UpdateJobExecution -> ShowS
$cshowsPrec :: Int -> UpdateJobExecution -> ShowS
Prelude.Show, forall x. Rep UpdateJobExecution x -> UpdateJobExecution
forall x. UpdateJobExecution -> Rep UpdateJobExecution x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UpdateJobExecution x -> UpdateJobExecution
$cfrom :: forall x. UpdateJobExecution -> Rep UpdateJobExecution x
Prelude.Generic)

-- |
-- Create a value of 'UpdateJobExecution' 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:
--
-- 'executionNumber', 'updateJobExecution_executionNumber' - Optional. A number that identifies a particular job execution on a
-- particular device.
--
-- 'expectedVersion', 'updateJobExecution_expectedVersion' - Optional. The expected current version of the job execution. Each time
-- you update the job execution, its version is incremented. If the version
-- of the job execution stored in Jobs does not match, the update is
-- rejected with a VersionMismatch error, and an ErrorResponse that
-- contains the current job execution status data is returned. (This makes
-- it unnecessary to perform a separate DescribeJobExecution request in
-- order to obtain the job execution status data.)
--
-- 'includeJobDocument', 'updateJobExecution_includeJobDocument' - Optional. When set to true, the response contains the job document. The
-- default is false.
--
-- 'includeJobExecutionState', 'updateJobExecution_includeJobExecutionState' - Optional. When included and set to true, the response contains the
-- JobExecutionState data. The default is false.
--
-- 'statusDetails', 'updateJobExecution_statusDetails' - Optional. A collection of name\/value pairs that describe the status of
-- the job execution. If not specified, the statusDetails are unchanged.
--
-- 'stepTimeoutInMinutes', 'updateJobExecution_stepTimeoutInMinutes' - Specifies the amount of time this device has to finish execution of this
-- job. If the job execution status is not set to a terminal state before
-- this timer expires, or before the timer is reset (by again calling
-- @UpdateJobExecution@, setting the status to @IN_PROGRESS@ and specifying
-- a new timeout value in this field) the job execution status will be
-- automatically set to @TIMED_OUT@. Note that setting or resetting this
-- timeout has no effect on that job execution timeout which may have been
-- specified when the job was created (@CreateJob@ using field
-- @timeoutConfig@).
--
-- 'jobId', 'updateJobExecution_jobId' - The unique identifier assigned to this job when it was created.
--
-- 'thingName', 'updateJobExecution_thingName' - The name of the thing associated with the device.
--
-- 'status', 'updateJobExecution_status' - The new status for the job execution (IN_PROGRESS, FAILED, SUCCESS, or
-- REJECTED). This must be specified on every update.
newUpdateJobExecution ::
  -- | 'jobId'
  Prelude.Text ->
  -- | 'thingName'
  Prelude.Text ->
  -- | 'status'
  JobExecutionStatus ->
  UpdateJobExecution
newUpdateJobExecution :: Text -> Text -> JobExecutionStatus -> UpdateJobExecution
newUpdateJobExecution Text
pJobId_ Text
pThingName_ JobExecutionStatus
pStatus_ =
  UpdateJobExecution'
    { $sel:executionNumber:UpdateJobExecution' :: Maybe Integer
executionNumber =
        forall a. Maybe a
Prelude.Nothing,
      $sel:expectedVersion:UpdateJobExecution' :: Maybe Integer
expectedVersion = forall a. Maybe a
Prelude.Nothing,
      $sel:includeJobDocument:UpdateJobExecution' :: Maybe Bool
includeJobDocument = forall a. Maybe a
Prelude.Nothing,
      $sel:includeJobExecutionState:UpdateJobExecution' :: Maybe Bool
includeJobExecutionState = forall a. Maybe a
Prelude.Nothing,
      $sel:statusDetails:UpdateJobExecution' :: Maybe (HashMap Text Text)
statusDetails = forall a. Maybe a
Prelude.Nothing,
      $sel:stepTimeoutInMinutes:UpdateJobExecution' :: Maybe Integer
stepTimeoutInMinutes = forall a. Maybe a
Prelude.Nothing,
      $sel:jobId:UpdateJobExecution' :: Text
jobId = Text
pJobId_,
      $sel:thingName:UpdateJobExecution' :: Text
thingName = Text
pThingName_,
      $sel:status:UpdateJobExecution' :: JobExecutionStatus
status = JobExecutionStatus
pStatus_
    }

-- | Optional. A number that identifies a particular job execution on a
-- particular device.
updateJobExecution_executionNumber :: Lens.Lens' UpdateJobExecution (Prelude.Maybe Prelude.Integer)
updateJobExecution_executionNumber :: Lens' UpdateJobExecution (Maybe Integer)
updateJobExecution_executionNumber = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateJobExecution' {Maybe Integer
executionNumber :: Maybe Integer
$sel:executionNumber:UpdateJobExecution' :: UpdateJobExecution -> Maybe Integer
executionNumber} -> Maybe Integer
executionNumber) (\s :: UpdateJobExecution
s@UpdateJobExecution' {} Maybe Integer
a -> UpdateJobExecution
s {$sel:executionNumber:UpdateJobExecution' :: Maybe Integer
executionNumber = Maybe Integer
a} :: UpdateJobExecution)

-- | Optional. The expected current version of the job execution. Each time
-- you update the job execution, its version is incremented. If the version
-- of the job execution stored in Jobs does not match, the update is
-- rejected with a VersionMismatch error, and an ErrorResponse that
-- contains the current job execution status data is returned. (This makes
-- it unnecessary to perform a separate DescribeJobExecution request in
-- order to obtain the job execution status data.)
updateJobExecution_expectedVersion :: Lens.Lens' UpdateJobExecution (Prelude.Maybe Prelude.Integer)
updateJobExecution_expectedVersion :: Lens' UpdateJobExecution (Maybe Integer)
updateJobExecution_expectedVersion = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateJobExecution' {Maybe Integer
expectedVersion :: Maybe Integer
$sel:expectedVersion:UpdateJobExecution' :: UpdateJobExecution -> Maybe Integer
expectedVersion} -> Maybe Integer
expectedVersion) (\s :: UpdateJobExecution
s@UpdateJobExecution' {} Maybe Integer
a -> UpdateJobExecution
s {$sel:expectedVersion:UpdateJobExecution' :: Maybe Integer
expectedVersion = Maybe Integer
a} :: UpdateJobExecution)

-- | Optional. When set to true, the response contains the job document. The
-- default is false.
updateJobExecution_includeJobDocument :: Lens.Lens' UpdateJobExecution (Prelude.Maybe Prelude.Bool)
updateJobExecution_includeJobDocument :: Lens' UpdateJobExecution (Maybe Bool)
updateJobExecution_includeJobDocument = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateJobExecution' {Maybe Bool
includeJobDocument :: Maybe Bool
$sel:includeJobDocument:UpdateJobExecution' :: UpdateJobExecution -> Maybe Bool
includeJobDocument} -> Maybe Bool
includeJobDocument) (\s :: UpdateJobExecution
s@UpdateJobExecution' {} Maybe Bool
a -> UpdateJobExecution
s {$sel:includeJobDocument:UpdateJobExecution' :: Maybe Bool
includeJobDocument = Maybe Bool
a} :: UpdateJobExecution)

-- | Optional. When included and set to true, the response contains the
-- JobExecutionState data. The default is false.
updateJobExecution_includeJobExecutionState :: Lens.Lens' UpdateJobExecution (Prelude.Maybe Prelude.Bool)
updateJobExecution_includeJobExecutionState :: Lens' UpdateJobExecution (Maybe Bool)
updateJobExecution_includeJobExecutionState = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateJobExecution' {Maybe Bool
includeJobExecutionState :: Maybe Bool
$sel:includeJobExecutionState:UpdateJobExecution' :: UpdateJobExecution -> Maybe Bool
includeJobExecutionState} -> Maybe Bool
includeJobExecutionState) (\s :: UpdateJobExecution
s@UpdateJobExecution' {} Maybe Bool
a -> UpdateJobExecution
s {$sel:includeJobExecutionState:UpdateJobExecution' :: Maybe Bool
includeJobExecutionState = Maybe Bool
a} :: UpdateJobExecution)

-- | Optional. A collection of name\/value pairs that describe the status of
-- the job execution. If not specified, the statusDetails are unchanged.
updateJobExecution_statusDetails :: Lens.Lens' UpdateJobExecution (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
updateJobExecution_statusDetails :: Lens' UpdateJobExecution (Maybe (HashMap Text Text))
updateJobExecution_statusDetails = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateJobExecution' {Maybe (HashMap Text Text)
statusDetails :: Maybe (HashMap Text Text)
$sel:statusDetails:UpdateJobExecution' :: UpdateJobExecution -> Maybe (HashMap Text Text)
statusDetails} -> Maybe (HashMap Text Text)
statusDetails) (\s :: UpdateJobExecution
s@UpdateJobExecution' {} Maybe (HashMap Text Text)
a -> UpdateJobExecution
s {$sel:statusDetails:UpdateJobExecution' :: Maybe (HashMap Text Text)
statusDetails = Maybe (HashMap Text Text)
a} :: UpdateJobExecution) 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

-- | Specifies the amount of time this device has to finish execution of this
-- job. If the job execution status is not set to a terminal state before
-- this timer expires, or before the timer is reset (by again calling
-- @UpdateJobExecution@, setting the status to @IN_PROGRESS@ and specifying
-- a new timeout value in this field) the job execution status will be
-- automatically set to @TIMED_OUT@. Note that setting or resetting this
-- timeout has no effect on that job execution timeout which may have been
-- specified when the job was created (@CreateJob@ using field
-- @timeoutConfig@).
updateJobExecution_stepTimeoutInMinutes :: Lens.Lens' UpdateJobExecution (Prelude.Maybe Prelude.Integer)
updateJobExecution_stepTimeoutInMinutes :: Lens' UpdateJobExecution (Maybe Integer)
updateJobExecution_stepTimeoutInMinutes = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateJobExecution' {Maybe Integer
stepTimeoutInMinutes :: Maybe Integer
$sel:stepTimeoutInMinutes:UpdateJobExecution' :: UpdateJobExecution -> Maybe Integer
stepTimeoutInMinutes} -> Maybe Integer
stepTimeoutInMinutes) (\s :: UpdateJobExecution
s@UpdateJobExecution' {} Maybe Integer
a -> UpdateJobExecution
s {$sel:stepTimeoutInMinutes:UpdateJobExecution' :: Maybe Integer
stepTimeoutInMinutes = Maybe Integer
a} :: UpdateJobExecution)

-- | The unique identifier assigned to this job when it was created.
updateJobExecution_jobId :: Lens.Lens' UpdateJobExecution Prelude.Text
updateJobExecution_jobId :: Lens' UpdateJobExecution Text
updateJobExecution_jobId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateJobExecution' {Text
jobId :: Text
$sel:jobId:UpdateJobExecution' :: UpdateJobExecution -> Text
jobId} -> Text
jobId) (\s :: UpdateJobExecution
s@UpdateJobExecution' {} Text
a -> UpdateJobExecution
s {$sel:jobId:UpdateJobExecution' :: Text
jobId = Text
a} :: UpdateJobExecution)

-- | The name of the thing associated with the device.
updateJobExecution_thingName :: Lens.Lens' UpdateJobExecution Prelude.Text
updateJobExecution_thingName :: Lens' UpdateJobExecution Text
updateJobExecution_thingName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateJobExecution' {Text
thingName :: Text
$sel:thingName:UpdateJobExecution' :: UpdateJobExecution -> Text
thingName} -> Text
thingName) (\s :: UpdateJobExecution
s@UpdateJobExecution' {} Text
a -> UpdateJobExecution
s {$sel:thingName:UpdateJobExecution' :: Text
thingName = Text
a} :: UpdateJobExecution)

-- | The new status for the job execution (IN_PROGRESS, FAILED, SUCCESS, or
-- REJECTED). This must be specified on every update.
updateJobExecution_status :: Lens.Lens' UpdateJobExecution JobExecutionStatus
updateJobExecution_status :: Lens' UpdateJobExecution JobExecutionStatus
updateJobExecution_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateJobExecution' {JobExecutionStatus
status :: JobExecutionStatus
$sel:status:UpdateJobExecution' :: UpdateJobExecution -> JobExecutionStatus
status} -> JobExecutionStatus
status) (\s :: UpdateJobExecution
s@UpdateJobExecution' {} JobExecutionStatus
a -> UpdateJobExecution
s {$sel:status:UpdateJobExecution' :: JobExecutionStatus
status = JobExecutionStatus
a} :: UpdateJobExecution)

instance Core.AWSRequest UpdateJobExecution where
  type
    AWSResponse UpdateJobExecution =
      UpdateJobExecutionResponse
  request :: (Service -> Service)
-> UpdateJobExecution -> Request UpdateJobExecution
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 UpdateJobExecution
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse UpdateJobExecution)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Maybe JobExecutionState
-> Maybe Text -> Int -> UpdateJobExecutionResponse
UpdateJobExecutionResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"executionState")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"jobDocument")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance Prelude.Hashable UpdateJobExecution where
  hashWithSalt :: Int -> UpdateJobExecution -> Int
hashWithSalt Int
_salt UpdateJobExecution' {Maybe Bool
Maybe Integer
Maybe (HashMap Text Text)
Text
JobExecutionStatus
status :: JobExecutionStatus
thingName :: Text
jobId :: Text
stepTimeoutInMinutes :: Maybe Integer
statusDetails :: Maybe (HashMap Text Text)
includeJobExecutionState :: Maybe Bool
includeJobDocument :: Maybe Bool
expectedVersion :: Maybe Integer
executionNumber :: Maybe Integer
$sel:status:UpdateJobExecution' :: UpdateJobExecution -> JobExecutionStatus
$sel:thingName:UpdateJobExecution' :: UpdateJobExecution -> Text
$sel:jobId:UpdateJobExecution' :: UpdateJobExecution -> Text
$sel:stepTimeoutInMinutes:UpdateJobExecution' :: UpdateJobExecution -> Maybe Integer
$sel:statusDetails:UpdateJobExecution' :: UpdateJobExecution -> Maybe (HashMap Text Text)
$sel:includeJobExecutionState:UpdateJobExecution' :: UpdateJobExecution -> Maybe Bool
$sel:includeJobDocument:UpdateJobExecution' :: UpdateJobExecution -> Maybe Bool
$sel:expectedVersion:UpdateJobExecution' :: UpdateJobExecution -> Maybe Integer
$sel:executionNumber:UpdateJobExecution' :: UpdateJobExecution -> Maybe Integer
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Integer
executionNumber
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Integer
expectedVersion
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
includeJobDocument
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bool
includeJobExecutionState
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe (HashMap Text Text)
statusDetails
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Integer
stepTimeoutInMinutes
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
jobId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
thingName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` JobExecutionStatus
status

instance Prelude.NFData UpdateJobExecution where
  rnf :: UpdateJobExecution -> ()
rnf UpdateJobExecution' {Maybe Bool
Maybe Integer
Maybe (HashMap Text Text)
Text
JobExecutionStatus
status :: JobExecutionStatus
thingName :: Text
jobId :: Text
stepTimeoutInMinutes :: Maybe Integer
statusDetails :: Maybe (HashMap Text Text)
includeJobExecutionState :: Maybe Bool
includeJobDocument :: Maybe Bool
expectedVersion :: Maybe Integer
executionNumber :: Maybe Integer
$sel:status:UpdateJobExecution' :: UpdateJobExecution -> JobExecutionStatus
$sel:thingName:UpdateJobExecution' :: UpdateJobExecution -> Text
$sel:jobId:UpdateJobExecution' :: UpdateJobExecution -> Text
$sel:stepTimeoutInMinutes:UpdateJobExecution' :: UpdateJobExecution -> Maybe Integer
$sel:statusDetails:UpdateJobExecution' :: UpdateJobExecution -> Maybe (HashMap Text Text)
$sel:includeJobExecutionState:UpdateJobExecution' :: UpdateJobExecution -> Maybe Bool
$sel:includeJobDocument:UpdateJobExecution' :: UpdateJobExecution -> Maybe Bool
$sel:expectedVersion:UpdateJobExecution' :: UpdateJobExecution -> Maybe Integer
$sel:executionNumber:UpdateJobExecution' :: UpdateJobExecution -> Maybe Integer
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Integer
executionNumber
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Integer
expectedVersion
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
includeJobDocument
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Bool
includeJobExecutionState
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe (HashMap Text Text)
statusDetails
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Integer
stepTimeoutInMinutes
      seq :: forall a b. a -> b -> b
`Prelude.seq` 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 Text
thingName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf JobExecutionStatus
status

instance Data.ToHeaders UpdateJobExecution where
  toHeaders :: UpdateJobExecution -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

instance Data.ToJSON UpdateJobExecution where
  toJSON :: UpdateJobExecution -> Value
toJSON UpdateJobExecution' {Maybe Bool
Maybe Integer
Maybe (HashMap Text Text)
Text
JobExecutionStatus
status :: JobExecutionStatus
thingName :: Text
jobId :: Text
stepTimeoutInMinutes :: Maybe Integer
statusDetails :: Maybe (HashMap Text Text)
includeJobExecutionState :: Maybe Bool
includeJobDocument :: Maybe Bool
expectedVersion :: Maybe Integer
executionNumber :: Maybe Integer
$sel:status:UpdateJobExecution' :: UpdateJobExecution -> JobExecutionStatus
$sel:thingName:UpdateJobExecution' :: UpdateJobExecution -> Text
$sel:jobId:UpdateJobExecution' :: UpdateJobExecution -> Text
$sel:stepTimeoutInMinutes:UpdateJobExecution' :: UpdateJobExecution -> Maybe Integer
$sel:statusDetails:UpdateJobExecution' :: UpdateJobExecution -> Maybe (HashMap Text Text)
$sel:includeJobExecutionState:UpdateJobExecution' :: UpdateJobExecution -> Maybe Bool
$sel:includeJobDocument:UpdateJobExecution' :: UpdateJobExecution -> Maybe Bool
$sel:expectedVersion:UpdateJobExecution' :: UpdateJobExecution -> Maybe Integer
$sel:executionNumber:UpdateJobExecution' :: UpdateJobExecution -> Maybe Integer
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"executionNumber" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Integer
executionNumber,
            (Key
"expectedVersion" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Integer
expectedVersion,
            (Key
"includeJobDocument" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Bool
includeJobDocument,
            (Key
"includeJobExecutionState" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Bool
includeJobExecutionState,
            (Key
"statusDetails" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe (HashMap Text Text)
statusDetails,
            (Key
"stepTimeoutInMinutes" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe Integer
stepTimeoutInMinutes,
            forall a. a -> Maybe a
Prelude.Just (Key
"status" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= JobExecutionStatus
status)
          ]
      )

instance Data.ToPath UpdateJobExecution where
  toPath :: UpdateJobExecution -> ByteString
toPath UpdateJobExecution' {Maybe Bool
Maybe Integer
Maybe (HashMap Text Text)
Text
JobExecutionStatus
status :: JobExecutionStatus
thingName :: Text
jobId :: Text
stepTimeoutInMinutes :: Maybe Integer
statusDetails :: Maybe (HashMap Text Text)
includeJobExecutionState :: Maybe Bool
includeJobDocument :: Maybe Bool
expectedVersion :: Maybe Integer
executionNumber :: Maybe Integer
$sel:status:UpdateJobExecution' :: UpdateJobExecution -> JobExecutionStatus
$sel:thingName:UpdateJobExecution' :: UpdateJobExecution -> Text
$sel:jobId:UpdateJobExecution' :: UpdateJobExecution -> Text
$sel:stepTimeoutInMinutes:UpdateJobExecution' :: UpdateJobExecution -> Maybe Integer
$sel:statusDetails:UpdateJobExecution' :: UpdateJobExecution -> Maybe (HashMap Text Text)
$sel:includeJobExecutionState:UpdateJobExecution' :: UpdateJobExecution -> Maybe Bool
$sel:includeJobDocument:UpdateJobExecution' :: UpdateJobExecution -> Maybe Bool
$sel:expectedVersion:UpdateJobExecution' :: UpdateJobExecution -> Maybe Integer
$sel:executionNumber:UpdateJobExecution' :: UpdateJobExecution -> Maybe Integer
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/things/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
thingName,
        ByteString
"/jobs/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
jobId
      ]

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

-- | /See:/ 'newUpdateJobExecutionResponse' smart constructor.
data UpdateJobExecutionResponse = UpdateJobExecutionResponse'
  { -- | A JobExecutionState object.
    UpdateJobExecutionResponse -> Maybe JobExecutionState
executionState :: Prelude.Maybe JobExecutionState,
    -- | The contents of the Job Documents.
    UpdateJobExecutionResponse -> Maybe Text
jobDocument :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    UpdateJobExecutionResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (UpdateJobExecutionResponse -> UpdateJobExecutionResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateJobExecutionResponse -> UpdateJobExecutionResponse -> Bool
$c/= :: UpdateJobExecutionResponse -> UpdateJobExecutionResponse -> Bool
== :: UpdateJobExecutionResponse -> UpdateJobExecutionResponse -> Bool
$c== :: UpdateJobExecutionResponse -> UpdateJobExecutionResponse -> Bool
Prelude.Eq, ReadPrec [UpdateJobExecutionResponse]
ReadPrec UpdateJobExecutionResponse
Int -> ReadS UpdateJobExecutionResponse
ReadS [UpdateJobExecutionResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateJobExecutionResponse]
$creadListPrec :: ReadPrec [UpdateJobExecutionResponse]
readPrec :: ReadPrec UpdateJobExecutionResponse
$creadPrec :: ReadPrec UpdateJobExecutionResponse
readList :: ReadS [UpdateJobExecutionResponse]
$creadList :: ReadS [UpdateJobExecutionResponse]
readsPrec :: Int -> ReadS UpdateJobExecutionResponse
$creadsPrec :: Int -> ReadS UpdateJobExecutionResponse
Prelude.Read, Int -> UpdateJobExecutionResponse -> ShowS
[UpdateJobExecutionResponse] -> ShowS
UpdateJobExecutionResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateJobExecutionResponse] -> ShowS
$cshowList :: [UpdateJobExecutionResponse] -> ShowS
show :: UpdateJobExecutionResponse -> String
$cshow :: UpdateJobExecutionResponse -> String
showsPrec :: Int -> UpdateJobExecutionResponse -> ShowS
$cshowsPrec :: Int -> UpdateJobExecutionResponse -> ShowS
Prelude.Show, forall x.
Rep UpdateJobExecutionResponse x -> UpdateJobExecutionResponse
forall x.
UpdateJobExecutionResponse -> Rep UpdateJobExecutionResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep UpdateJobExecutionResponse x -> UpdateJobExecutionResponse
$cfrom :: forall x.
UpdateJobExecutionResponse -> Rep UpdateJobExecutionResponse x
Prelude.Generic)

-- |
-- Create a value of 'UpdateJobExecutionResponse' 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:
--
-- 'executionState', 'updateJobExecutionResponse_executionState' - A JobExecutionState object.
--
-- 'jobDocument', 'updateJobExecutionResponse_jobDocument' - The contents of the Job Documents.
--
-- 'httpStatus', 'updateJobExecutionResponse_httpStatus' - The response's http status code.
newUpdateJobExecutionResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  UpdateJobExecutionResponse
newUpdateJobExecutionResponse :: Int -> UpdateJobExecutionResponse
newUpdateJobExecutionResponse Int
pHttpStatus_ =
  UpdateJobExecutionResponse'
    { $sel:executionState:UpdateJobExecutionResponse' :: Maybe JobExecutionState
executionState =
        forall a. Maybe a
Prelude.Nothing,
      $sel:jobDocument:UpdateJobExecutionResponse' :: Maybe Text
jobDocument = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:UpdateJobExecutionResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | A JobExecutionState object.
updateJobExecutionResponse_executionState :: Lens.Lens' UpdateJobExecutionResponse (Prelude.Maybe JobExecutionState)
updateJobExecutionResponse_executionState :: Lens' UpdateJobExecutionResponse (Maybe JobExecutionState)
updateJobExecutionResponse_executionState = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateJobExecutionResponse' {Maybe JobExecutionState
executionState :: Maybe JobExecutionState
$sel:executionState:UpdateJobExecutionResponse' :: UpdateJobExecutionResponse -> Maybe JobExecutionState
executionState} -> Maybe JobExecutionState
executionState) (\s :: UpdateJobExecutionResponse
s@UpdateJobExecutionResponse' {} Maybe JobExecutionState
a -> UpdateJobExecutionResponse
s {$sel:executionState:UpdateJobExecutionResponse' :: Maybe JobExecutionState
executionState = Maybe JobExecutionState
a} :: UpdateJobExecutionResponse)

-- | The contents of the Job Documents.
updateJobExecutionResponse_jobDocument :: Lens.Lens' UpdateJobExecutionResponse (Prelude.Maybe Prelude.Text)
updateJobExecutionResponse_jobDocument :: Lens' UpdateJobExecutionResponse (Maybe Text)
updateJobExecutionResponse_jobDocument = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateJobExecutionResponse' {Maybe Text
jobDocument :: Maybe Text
$sel:jobDocument:UpdateJobExecutionResponse' :: UpdateJobExecutionResponse -> Maybe Text
jobDocument} -> Maybe Text
jobDocument) (\s :: UpdateJobExecutionResponse
s@UpdateJobExecutionResponse' {} Maybe Text
a -> UpdateJobExecutionResponse
s {$sel:jobDocument:UpdateJobExecutionResponse' :: Maybe Text
jobDocument = Maybe Text
a} :: UpdateJobExecutionResponse)

-- | The response's http status code.
updateJobExecutionResponse_httpStatus :: Lens.Lens' UpdateJobExecutionResponse Prelude.Int
updateJobExecutionResponse_httpStatus :: Lens' UpdateJobExecutionResponse Int
updateJobExecutionResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateJobExecutionResponse' {Int
httpStatus :: Int
$sel:httpStatus:UpdateJobExecutionResponse' :: UpdateJobExecutionResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: UpdateJobExecutionResponse
s@UpdateJobExecutionResponse' {} Int
a -> UpdateJobExecutionResponse
s {$sel:httpStatus:UpdateJobExecutionResponse' :: Int
httpStatus = Int
a} :: UpdateJobExecutionResponse)

instance Prelude.NFData UpdateJobExecutionResponse where
  rnf :: UpdateJobExecutionResponse -> ()
rnf UpdateJobExecutionResponse' {Int
Maybe Text
Maybe JobExecutionState
httpStatus :: Int
jobDocument :: Maybe Text
executionState :: Maybe JobExecutionState
$sel:httpStatus:UpdateJobExecutionResponse' :: UpdateJobExecutionResponse -> Int
$sel:jobDocument:UpdateJobExecutionResponse' :: UpdateJobExecutionResponse -> Maybe Text
$sel:executionState:UpdateJobExecutionResponse' :: UpdateJobExecutionResponse -> Maybe JobExecutionState
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe JobExecutionState
executionState
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
jobDocument
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus