{-# 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.IoT.StartThingRegistrationTask
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates a bulk thing provisioning task.
--
-- Requires permission to access the
-- <https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions StartThingRegistrationTask>
-- action.
module Amazonka.IoT.StartThingRegistrationTask
  ( -- * Creating a Request
    StartThingRegistrationTask (..),
    newStartThingRegistrationTask,

    -- * Request Lenses
    startThingRegistrationTask_templateBody,
    startThingRegistrationTask_inputFileBucket,
    startThingRegistrationTask_inputFileKey,
    startThingRegistrationTask_roleArn,

    -- * Destructuring the Response
    StartThingRegistrationTaskResponse (..),
    newStartThingRegistrationTaskResponse,

    -- * Response Lenses
    startThingRegistrationTaskResponse_taskId,
    startThingRegistrationTaskResponse_httpStatus,
  )
where

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

-- | /See:/ 'newStartThingRegistrationTask' smart constructor.
data StartThingRegistrationTask = StartThingRegistrationTask'
  { -- | The provisioning template.
    StartThingRegistrationTask -> Text
templateBody :: Prelude.Text,
    -- | The S3 bucket that contains the input file.
    StartThingRegistrationTask -> Text
inputFileBucket :: Prelude.Text,
    -- | The name of input file within the S3 bucket. This file contains a
    -- newline delimited JSON file. Each line contains the parameter values to
    -- provision one device (thing).
    StartThingRegistrationTask -> Text
inputFileKey :: Prelude.Text,
    -- | The IAM role ARN that grants permission the input file.
    StartThingRegistrationTask -> Text
roleArn :: Prelude.Text
  }
  deriving (StartThingRegistrationTask -> StartThingRegistrationTask -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: StartThingRegistrationTask -> StartThingRegistrationTask -> Bool
$c/= :: StartThingRegistrationTask -> StartThingRegistrationTask -> Bool
== :: StartThingRegistrationTask -> StartThingRegistrationTask -> Bool
$c== :: StartThingRegistrationTask -> StartThingRegistrationTask -> Bool
Prelude.Eq, ReadPrec [StartThingRegistrationTask]
ReadPrec StartThingRegistrationTask
Int -> ReadS StartThingRegistrationTask
ReadS [StartThingRegistrationTask]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [StartThingRegistrationTask]
$creadListPrec :: ReadPrec [StartThingRegistrationTask]
readPrec :: ReadPrec StartThingRegistrationTask
$creadPrec :: ReadPrec StartThingRegistrationTask
readList :: ReadS [StartThingRegistrationTask]
$creadList :: ReadS [StartThingRegistrationTask]
readsPrec :: Int -> ReadS StartThingRegistrationTask
$creadsPrec :: Int -> ReadS StartThingRegistrationTask
Prelude.Read, Int -> StartThingRegistrationTask -> ShowS
[StartThingRegistrationTask] -> ShowS
StartThingRegistrationTask -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [StartThingRegistrationTask] -> ShowS
$cshowList :: [StartThingRegistrationTask] -> ShowS
show :: StartThingRegistrationTask -> String
$cshow :: StartThingRegistrationTask -> String
showsPrec :: Int -> StartThingRegistrationTask -> ShowS
$cshowsPrec :: Int -> StartThingRegistrationTask -> ShowS
Prelude.Show, forall x.
Rep StartThingRegistrationTask x -> StartThingRegistrationTask
forall x.
StartThingRegistrationTask -> Rep StartThingRegistrationTask x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep StartThingRegistrationTask x -> StartThingRegistrationTask
$cfrom :: forall x.
StartThingRegistrationTask -> Rep StartThingRegistrationTask x
Prelude.Generic)

-- |
-- Create a value of 'StartThingRegistrationTask' 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:
--
-- 'templateBody', 'startThingRegistrationTask_templateBody' - The provisioning template.
--
-- 'inputFileBucket', 'startThingRegistrationTask_inputFileBucket' - The S3 bucket that contains the input file.
--
-- 'inputFileKey', 'startThingRegistrationTask_inputFileKey' - The name of input file within the S3 bucket. This file contains a
-- newline delimited JSON file. Each line contains the parameter values to
-- provision one device (thing).
--
-- 'roleArn', 'startThingRegistrationTask_roleArn' - The IAM role ARN that grants permission the input file.
newStartThingRegistrationTask ::
  -- | 'templateBody'
  Prelude.Text ->
  -- | 'inputFileBucket'
  Prelude.Text ->
  -- | 'inputFileKey'
  Prelude.Text ->
  -- | 'roleArn'
  Prelude.Text ->
  StartThingRegistrationTask
newStartThingRegistrationTask :: Text -> Text -> Text -> Text -> StartThingRegistrationTask
newStartThingRegistrationTask
  Text
pTemplateBody_
  Text
pInputFileBucket_
  Text
pInputFileKey_
  Text
pRoleArn_ =
    StartThingRegistrationTask'
      { $sel:templateBody:StartThingRegistrationTask' :: Text
templateBody =
          Text
pTemplateBody_,
        $sel:inputFileBucket:StartThingRegistrationTask' :: Text
inputFileBucket = Text
pInputFileBucket_,
        $sel:inputFileKey:StartThingRegistrationTask' :: Text
inputFileKey = Text
pInputFileKey_,
        $sel:roleArn:StartThingRegistrationTask' :: Text
roleArn = Text
pRoleArn_
      }

-- | The provisioning template.
startThingRegistrationTask_templateBody :: Lens.Lens' StartThingRegistrationTask Prelude.Text
startThingRegistrationTask_templateBody :: Lens' StartThingRegistrationTask Text
startThingRegistrationTask_templateBody = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\StartThingRegistrationTask' {Text
templateBody :: Text
$sel:templateBody:StartThingRegistrationTask' :: StartThingRegistrationTask -> Text
templateBody} -> Text
templateBody) (\s :: StartThingRegistrationTask
s@StartThingRegistrationTask' {} Text
a -> StartThingRegistrationTask
s {$sel:templateBody:StartThingRegistrationTask' :: Text
templateBody = Text
a} :: StartThingRegistrationTask)

-- | The S3 bucket that contains the input file.
startThingRegistrationTask_inputFileBucket :: Lens.Lens' StartThingRegistrationTask Prelude.Text
startThingRegistrationTask_inputFileBucket :: Lens' StartThingRegistrationTask Text
startThingRegistrationTask_inputFileBucket = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\StartThingRegistrationTask' {Text
inputFileBucket :: Text
$sel:inputFileBucket:StartThingRegistrationTask' :: StartThingRegistrationTask -> Text
inputFileBucket} -> Text
inputFileBucket) (\s :: StartThingRegistrationTask
s@StartThingRegistrationTask' {} Text
a -> StartThingRegistrationTask
s {$sel:inputFileBucket:StartThingRegistrationTask' :: Text
inputFileBucket = Text
a} :: StartThingRegistrationTask)

-- | The name of input file within the S3 bucket. This file contains a
-- newline delimited JSON file. Each line contains the parameter values to
-- provision one device (thing).
startThingRegistrationTask_inputFileKey :: Lens.Lens' StartThingRegistrationTask Prelude.Text
startThingRegistrationTask_inputFileKey :: Lens' StartThingRegistrationTask Text
startThingRegistrationTask_inputFileKey = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\StartThingRegistrationTask' {Text
inputFileKey :: Text
$sel:inputFileKey:StartThingRegistrationTask' :: StartThingRegistrationTask -> Text
inputFileKey} -> Text
inputFileKey) (\s :: StartThingRegistrationTask
s@StartThingRegistrationTask' {} Text
a -> StartThingRegistrationTask
s {$sel:inputFileKey:StartThingRegistrationTask' :: Text
inputFileKey = Text
a} :: StartThingRegistrationTask)

-- | The IAM role ARN that grants permission the input file.
startThingRegistrationTask_roleArn :: Lens.Lens' StartThingRegistrationTask Prelude.Text
startThingRegistrationTask_roleArn :: Lens' StartThingRegistrationTask Text
startThingRegistrationTask_roleArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\StartThingRegistrationTask' {Text
roleArn :: Text
$sel:roleArn:StartThingRegistrationTask' :: StartThingRegistrationTask -> Text
roleArn} -> Text
roleArn) (\s :: StartThingRegistrationTask
s@StartThingRegistrationTask' {} Text
a -> StartThingRegistrationTask
s {$sel:roleArn:StartThingRegistrationTask' :: Text
roleArn = Text
a} :: StartThingRegistrationTask)

instance Core.AWSRequest StartThingRegistrationTask where
  type
    AWSResponse StartThingRegistrationTask =
      StartThingRegistrationTaskResponse
  request :: (Service -> Service)
-> StartThingRegistrationTask -> Request StartThingRegistrationTask
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 StartThingRegistrationTask
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse StartThingRegistrationTask)))
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 Text -> Int -> StartThingRegistrationTaskResponse
StartThingRegistrationTaskResponse'
            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
"taskId")
            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 StartThingRegistrationTask where
  hashWithSalt :: Int -> StartThingRegistrationTask -> Int
hashWithSalt Int
_salt StartThingRegistrationTask' {Text
roleArn :: Text
inputFileKey :: Text
inputFileBucket :: Text
templateBody :: Text
$sel:roleArn:StartThingRegistrationTask' :: StartThingRegistrationTask -> Text
$sel:inputFileKey:StartThingRegistrationTask' :: StartThingRegistrationTask -> Text
$sel:inputFileBucket:StartThingRegistrationTask' :: StartThingRegistrationTask -> Text
$sel:templateBody:StartThingRegistrationTask' :: StartThingRegistrationTask -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
templateBody
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
inputFileBucket
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
inputFileKey
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
roleArn

instance Prelude.NFData StartThingRegistrationTask where
  rnf :: StartThingRegistrationTask -> ()
rnf StartThingRegistrationTask' {Text
roleArn :: Text
inputFileKey :: Text
inputFileBucket :: Text
templateBody :: Text
$sel:roleArn:StartThingRegistrationTask' :: StartThingRegistrationTask -> Text
$sel:inputFileKey:StartThingRegistrationTask' :: StartThingRegistrationTask -> Text
$sel:inputFileBucket:StartThingRegistrationTask' :: StartThingRegistrationTask -> Text
$sel:templateBody:StartThingRegistrationTask' :: StartThingRegistrationTask -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
templateBody
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
inputFileBucket
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
inputFileKey
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
roleArn

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

instance Data.ToJSON StartThingRegistrationTask where
  toJSON :: StartThingRegistrationTask -> Value
toJSON StartThingRegistrationTask' {Text
roleArn :: Text
inputFileKey :: Text
inputFileBucket :: Text
templateBody :: Text
$sel:roleArn:StartThingRegistrationTask' :: StartThingRegistrationTask -> Text
$sel:inputFileKey:StartThingRegistrationTask' :: StartThingRegistrationTask -> Text
$sel:inputFileBucket:StartThingRegistrationTask' :: StartThingRegistrationTask -> Text
$sel:templateBody:StartThingRegistrationTask' :: StartThingRegistrationTask -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just (Key
"templateBody" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
templateBody),
            forall a. a -> Maybe a
Prelude.Just
              (Key
"inputFileBucket" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
inputFileBucket),
            forall a. a -> Maybe a
Prelude.Just (Key
"inputFileKey" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
inputFileKey),
            forall a. a -> Maybe a
Prelude.Just (Key
"roleArn" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
roleArn)
          ]
      )

instance Data.ToPath StartThingRegistrationTask where
  toPath :: StartThingRegistrationTask -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/thing-registration-tasks"

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

-- | /See:/ 'newStartThingRegistrationTaskResponse' smart constructor.
data StartThingRegistrationTaskResponse = StartThingRegistrationTaskResponse'
  { -- | The bulk thing provisioning task ID.
    StartThingRegistrationTaskResponse -> Maybe Text
taskId :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    StartThingRegistrationTaskResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (StartThingRegistrationTaskResponse
-> StartThingRegistrationTaskResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: StartThingRegistrationTaskResponse
-> StartThingRegistrationTaskResponse -> Bool
$c/= :: StartThingRegistrationTaskResponse
-> StartThingRegistrationTaskResponse -> Bool
== :: StartThingRegistrationTaskResponse
-> StartThingRegistrationTaskResponse -> Bool
$c== :: StartThingRegistrationTaskResponse
-> StartThingRegistrationTaskResponse -> Bool
Prelude.Eq, ReadPrec [StartThingRegistrationTaskResponse]
ReadPrec StartThingRegistrationTaskResponse
Int -> ReadS StartThingRegistrationTaskResponse
ReadS [StartThingRegistrationTaskResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [StartThingRegistrationTaskResponse]
$creadListPrec :: ReadPrec [StartThingRegistrationTaskResponse]
readPrec :: ReadPrec StartThingRegistrationTaskResponse
$creadPrec :: ReadPrec StartThingRegistrationTaskResponse
readList :: ReadS [StartThingRegistrationTaskResponse]
$creadList :: ReadS [StartThingRegistrationTaskResponse]
readsPrec :: Int -> ReadS StartThingRegistrationTaskResponse
$creadsPrec :: Int -> ReadS StartThingRegistrationTaskResponse
Prelude.Read, Int -> StartThingRegistrationTaskResponse -> ShowS
[StartThingRegistrationTaskResponse] -> ShowS
StartThingRegistrationTaskResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [StartThingRegistrationTaskResponse] -> ShowS
$cshowList :: [StartThingRegistrationTaskResponse] -> ShowS
show :: StartThingRegistrationTaskResponse -> String
$cshow :: StartThingRegistrationTaskResponse -> String
showsPrec :: Int -> StartThingRegistrationTaskResponse -> ShowS
$cshowsPrec :: Int -> StartThingRegistrationTaskResponse -> ShowS
Prelude.Show, forall x.
Rep StartThingRegistrationTaskResponse x
-> StartThingRegistrationTaskResponse
forall x.
StartThingRegistrationTaskResponse
-> Rep StartThingRegistrationTaskResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep StartThingRegistrationTaskResponse x
-> StartThingRegistrationTaskResponse
$cfrom :: forall x.
StartThingRegistrationTaskResponse
-> Rep StartThingRegistrationTaskResponse x
Prelude.Generic)

-- |
-- Create a value of 'StartThingRegistrationTaskResponse' 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:
--
-- 'taskId', 'startThingRegistrationTaskResponse_taskId' - The bulk thing provisioning task ID.
--
-- 'httpStatus', 'startThingRegistrationTaskResponse_httpStatus' - The response's http status code.
newStartThingRegistrationTaskResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  StartThingRegistrationTaskResponse
newStartThingRegistrationTaskResponse :: Int -> StartThingRegistrationTaskResponse
newStartThingRegistrationTaskResponse Int
pHttpStatus_ =
  StartThingRegistrationTaskResponse'
    { $sel:taskId:StartThingRegistrationTaskResponse' :: Maybe Text
taskId =
        forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:StartThingRegistrationTaskResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The bulk thing provisioning task ID.
startThingRegistrationTaskResponse_taskId :: Lens.Lens' StartThingRegistrationTaskResponse (Prelude.Maybe Prelude.Text)
startThingRegistrationTaskResponse_taskId :: Lens' StartThingRegistrationTaskResponse (Maybe Text)
startThingRegistrationTaskResponse_taskId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\StartThingRegistrationTaskResponse' {Maybe Text
taskId :: Maybe Text
$sel:taskId:StartThingRegistrationTaskResponse' :: StartThingRegistrationTaskResponse -> Maybe Text
taskId} -> Maybe Text
taskId) (\s :: StartThingRegistrationTaskResponse
s@StartThingRegistrationTaskResponse' {} Maybe Text
a -> StartThingRegistrationTaskResponse
s {$sel:taskId:StartThingRegistrationTaskResponse' :: Maybe Text
taskId = Maybe Text
a} :: StartThingRegistrationTaskResponse)

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

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