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

    -- * Request Lenses
    describeJobExecution_executionNumber,
    describeJobExecution_includeJobDocument,
    describeJobExecution_jobId,
    describeJobExecution_thingName,

    -- * Destructuring the Response
    DescribeJobExecutionResponse (..),
    newDescribeJobExecutionResponse,

    -- * Response Lenses
    describeJobExecutionResponse_execution,
    describeJobExecutionResponse_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:/ 'newDescribeJobExecution' smart constructor.
data DescribeJobExecution = DescribeJobExecution'
  { -- | Optional. A number that identifies a particular job execution on a
    -- particular device. If not specified, the latest job execution is
    -- returned.
    DescribeJobExecution -> Maybe Integer
executionNumber :: Prelude.Maybe Prelude.Integer,
    -- | Optional. When set to true, the response contains the job document. The
    -- default is false.
    DescribeJobExecution -> Maybe Bool
includeJobDocument :: Prelude.Maybe Prelude.Bool,
    -- | The unique identifier assigned to this job when it was created.
    DescribeJobExecution -> Text
jobId :: Prelude.Text,
    -- | The thing name associated with the device the job execution is running
    -- on.
    DescribeJobExecution -> Text
thingName :: Prelude.Text
  }
  deriving (DescribeJobExecution -> DescribeJobExecution -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeJobExecution -> DescribeJobExecution -> Bool
$c/= :: DescribeJobExecution -> DescribeJobExecution -> Bool
== :: DescribeJobExecution -> DescribeJobExecution -> Bool
$c== :: DescribeJobExecution -> DescribeJobExecution -> Bool
Prelude.Eq, ReadPrec [DescribeJobExecution]
ReadPrec DescribeJobExecution
Int -> ReadS DescribeJobExecution
ReadS [DescribeJobExecution]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeJobExecution]
$creadListPrec :: ReadPrec [DescribeJobExecution]
readPrec :: ReadPrec DescribeJobExecution
$creadPrec :: ReadPrec DescribeJobExecution
readList :: ReadS [DescribeJobExecution]
$creadList :: ReadS [DescribeJobExecution]
readsPrec :: Int -> ReadS DescribeJobExecution
$creadsPrec :: Int -> ReadS DescribeJobExecution
Prelude.Read, Int -> DescribeJobExecution -> ShowS
[DescribeJobExecution] -> ShowS
DescribeJobExecution -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeJobExecution] -> ShowS
$cshowList :: [DescribeJobExecution] -> ShowS
show :: DescribeJobExecution -> String
$cshow :: DescribeJobExecution -> String
showsPrec :: Int -> DescribeJobExecution -> ShowS
$cshowsPrec :: Int -> DescribeJobExecution -> ShowS
Prelude.Show, forall x. Rep DescribeJobExecution x -> DescribeJobExecution
forall x. DescribeJobExecution -> Rep DescribeJobExecution x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeJobExecution x -> DescribeJobExecution
$cfrom :: forall x. DescribeJobExecution -> Rep DescribeJobExecution x
Prelude.Generic)

-- |
-- Create a value of 'DescribeJobExecution' 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', 'describeJobExecution_executionNumber' - Optional. A number that identifies a particular job execution on a
-- particular device. If not specified, the latest job execution is
-- returned.
--
-- 'includeJobDocument', 'describeJobExecution_includeJobDocument' - Optional. When set to true, the response contains the job document. The
-- default is false.
--
-- 'jobId', 'describeJobExecution_jobId' - The unique identifier assigned to this job when it was created.
--
-- 'thingName', 'describeJobExecution_thingName' - The thing name associated with the device the job execution is running
-- on.
newDescribeJobExecution ::
  -- | 'jobId'
  Prelude.Text ->
  -- | 'thingName'
  Prelude.Text ->
  DescribeJobExecution
newDescribeJobExecution :: Text -> Text -> DescribeJobExecution
newDescribeJobExecution Text
pJobId_ Text
pThingName_ =
  DescribeJobExecution'
    { $sel:executionNumber:DescribeJobExecution' :: Maybe Integer
executionNumber =
        forall a. Maybe a
Prelude.Nothing,
      $sel:includeJobDocument:DescribeJobExecution' :: Maybe Bool
includeJobDocument = forall a. Maybe a
Prelude.Nothing,
      $sel:jobId:DescribeJobExecution' :: Text
jobId = Text
pJobId_,
      $sel:thingName:DescribeJobExecution' :: Text
thingName = Text
pThingName_
    }

-- | Optional. A number that identifies a particular job execution on a
-- particular device. If not specified, the latest job execution is
-- returned.
describeJobExecution_executionNumber :: Lens.Lens' DescribeJobExecution (Prelude.Maybe Prelude.Integer)
describeJobExecution_executionNumber :: Lens' DescribeJobExecution (Maybe Integer)
describeJobExecution_executionNumber = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeJobExecution' {Maybe Integer
executionNumber :: Maybe Integer
$sel:executionNumber:DescribeJobExecution' :: DescribeJobExecution -> Maybe Integer
executionNumber} -> Maybe Integer
executionNumber) (\s :: DescribeJobExecution
s@DescribeJobExecution' {} Maybe Integer
a -> DescribeJobExecution
s {$sel:executionNumber:DescribeJobExecution' :: Maybe Integer
executionNumber = Maybe Integer
a} :: DescribeJobExecution)

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

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

-- | The thing name associated with the device the job execution is running
-- on.
describeJobExecution_thingName :: Lens.Lens' DescribeJobExecution Prelude.Text
describeJobExecution_thingName :: Lens' DescribeJobExecution Text
describeJobExecution_thingName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeJobExecution' {Text
thingName :: Text
$sel:thingName:DescribeJobExecution' :: DescribeJobExecution -> Text
thingName} -> Text
thingName) (\s :: DescribeJobExecution
s@DescribeJobExecution' {} Text
a -> DescribeJobExecution
s {$sel:thingName:DescribeJobExecution' :: Text
thingName = Text
a} :: DescribeJobExecution)

instance Core.AWSRequest DescribeJobExecution where
  type
    AWSResponse DescribeJobExecution =
      DescribeJobExecutionResponse
  request :: (Service -> Service)
-> DescribeJobExecution -> Request DescribeJobExecution
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.get (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy DescribeJobExecution
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DescribeJobExecution)))
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 JobExecution -> Int -> DescribeJobExecutionResponse
DescribeJobExecutionResponse'
            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
"execution")
            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 DescribeJobExecution where
  hashWithSalt :: Int -> DescribeJobExecution -> Int
hashWithSalt Int
_salt DescribeJobExecution' {Maybe Bool
Maybe Integer
Text
thingName :: Text
jobId :: Text
includeJobDocument :: Maybe Bool
executionNumber :: Maybe Integer
$sel:thingName:DescribeJobExecution' :: DescribeJobExecution -> Text
$sel:jobId:DescribeJobExecution' :: DescribeJobExecution -> Text
$sel:includeJobDocument:DescribeJobExecution' :: DescribeJobExecution -> Maybe Bool
$sel:executionNumber:DescribeJobExecution' :: DescribeJobExecution -> 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 Bool
includeJobDocument
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
jobId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
thingName

instance Prelude.NFData DescribeJobExecution where
  rnf :: DescribeJobExecution -> ()
rnf DescribeJobExecution' {Maybe Bool
Maybe Integer
Text
thingName :: Text
jobId :: Text
includeJobDocument :: Maybe Bool
executionNumber :: Maybe Integer
$sel:thingName:DescribeJobExecution' :: DescribeJobExecution -> Text
$sel:jobId:DescribeJobExecution' :: DescribeJobExecution -> Text
$sel:includeJobDocument:DescribeJobExecution' :: DescribeJobExecution -> Maybe Bool
$sel:executionNumber:DescribeJobExecution' :: DescribeJobExecution -> 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 Bool
includeJobDocument
      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

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

instance Data.ToPath DescribeJobExecution where
  toPath :: DescribeJobExecution -> ByteString
toPath DescribeJobExecution' {Maybe Bool
Maybe Integer
Text
thingName :: Text
jobId :: Text
includeJobDocument :: Maybe Bool
executionNumber :: Maybe Integer
$sel:thingName:DescribeJobExecution' :: DescribeJobExecution -> Text
$sel:jobId:DescribeJobExecution' :: DescribeJobExecution -> Text
$sel:includeJobDocument:DescribeJobExecution' :: DescribeJobExecution -> Maybe Bool
$sel:executionNumber:DescribeJobExecution' :: DescribeJobExecution -> 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 DescribeJobExecution where
  toQuery :: DescribeJobExecution -> QueryString
toQuery DescribeJobExecution' {Maybe Bool
Maybe Integer
Text
thingName :: Text
jobId :: Text
includeJobDocument :: Maybe Bool
executionNumber :: Maybe Integer
$sel:thingName:DescribeJobExecution' :: DescribeJobExecution -> Text
$sel:jobId:DescribeJobExecution' :: DescribeJobExecution -> Text
$sel:includeJobDocument:DescribeJobExecution' :: DescribeJobExecution -> Maybe Bool
$sel:executionNumber:DescribeJobExecution' :: DescribeJobExecution -> Maybe Integer
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"executionNumber" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Integer
executionNumber,
        ByteString
"includeJobDocument" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Bool
includeJobDocument
      ]

-- | /See:/ 'newDescribeJobExecutionResponse' smart constructor.
data DescribeJobExecutionResponse = DescribeJobExecutionResponse'
  { -- | Contains data about a job execution.
    DescribeJobExecutionResponse -> Maybe JobExecution
execution :: Prelude.Maybe JobExecution,
    -- | The response's http status code.
    DescribeJobExecutionResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (DescribeJobExecutionResponse
-> DescribeJobExecutionResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeJobExecutionResponse
-> DescribeJobExecutionResponse -> Bool
$c/= :: DescribeJobExecutionResponse
-> DescribeJobExecutionResponse -> Bool
== :: DescribeJobExecutionResponse
-> DescribeJobExecutionResponse -> Bool
$c== :: DescribeJobExecutionResponse
-> DescribeJobExecutionResponse -> Bool
Prelude.Eq, ReadPrec [DescribeJobExecutionResponse]
ReadPrec DescribeJobExecutionResponse
Int -> ReadS DescribeJobExecutionResponse
ReadS [DescribeJobExecutionResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeJobExecutionResponse]
$creadListPrec :: ReadPrec [DescribeJobExecutionResponse]
readPrec :: ReadPrec DescribeJobExecutionResponse
$creadPrec :: ReadPrec DescribeJobExecutionResponse
readList :: ReadS [DescribeJobExecutionResponse]
$creadList :: ReadS [DescribeJobExecutionResponse]
readsPrec :: Int -> ReadS DescribeJobExecutionResponse
$creadsPrec :: Int -> ReadS DescribeJobExecutionResponse
Prelude.Read, Int -> DescribeJobExecutionResponse -> ShowS
[DescribeJobExecutionResponse] -> ShowS
DescribeJobExecutionResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeJobExecutionResponse] -> ShowS
$cshowList :: [DescribeJobExecutionResponse] -> ShowS
show :: DescribeJobExecutionResponse -> String
$cshow :: DescribeJobExecutionResponse -> String
showsPrec :: Int -> DescribeJobExecutionResponse -> ShowS
$cshowsPrec :: Int -> DescribeJobExecutionResponse -> ShowS
Prelude.Show, forall x.
Rep DescribeJobExecutionResponse x -> DescribeJobExecutionResponse
forall x.
DescribeJobExecutionResponse -> Rep DescribeJobExecutionResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeJobExecutionResponse x -> DescribeJobExecutionResponse
$cfrom :: forall x.
DescribeJobExecutionResponse -> Rep DescribeJobExecutionResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeJobExecutionResponse' 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:
--
-- 'execution', 'describeJobExecutionResponse_execution' - Contains data about a job execution.
--
-- 'httpStatus', 'describeJobExecutionResponse_httpStatus' - The response's http status code.
newDescribeJobExecutionResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  DescribeJobExecutionResponse
newDescribeJobExecutionResponse :: Int -> DescribeJobExecutionResponse
newDescribeJobExecutionResponse Int
pHttpStatus_ =
  DescribeJobExecutionResponse'
    { $sel:execution:DescribeJobExecutionResponse' :: Maybe JobExecution
execution =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:DescribeJobExecutionResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | Contains data about a job execution.
describeJobExecutionResponse_execution :: Lens.Lens' DescribeJobExecutionResponse (Prelude.Maybe JobExecution)
describeJobExecutionResponse_execution :: Lens' DescribeJobExecutionResponse (Maybe JobExecution)
describeJobExecutionResponse_execution = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeJobExecutionResponse' {Maybe JobExecution
execution :: Maybe JobExecution
$sel:execution:DescribeJobExecutionResponse' :: DescribeJobExecutionResponse -> Maybe JobExecution
execution} -> Maybe JobExecution
execution) (\s :: DescribeJobExecutionResponse
s@DescribeJobExecutionResponse' {} Maybe JobExecution
a -> DescribeJobExecutionResponse
s {$sel:execution:DescribeJobExecutionResponse' :: Maybe JobExecution
execution = Maybe JobExecution
a} :: DescribeJobExecutionResponse)

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

instance Prelude.NFData DescribeJobExecutionResponse where
  rnf :: DescribeJobExecutionResponse -> ()
rnf DescribeJobExecutionResponse' {Int
Maybe JobExecution
httpStatus :: Int
execution :: Maybe JobExecution
$sel:httpStatus:DescribeJobExecutionResponse' :: DescribeJobExecutionResponse -> Int
$sel:execution:DescribeJobExecutionResponse' :: DescribeJobExecutionResponse -> Maybe JobExecution
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe JobExecution
execution
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus