{-# 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.CreateProvisioningClaim
-- 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 provisioning claim.
--
-- Requires permission to access the
-- <https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions CreateProvisioningClaim>
-- action.
module Amazonka.IoT.CreateProvisioningClaim
  ( -- * Creating a Request
    CreateProvisioningClaim (..),
    newCreateProvisioningClaim,

    -- * Request Lenses
    createProvisioningClaim_templateName,

    -- * Destructuring the Response
    CreateProvisioningClaimResponse (..),
    newCreateProvisioningClaimResponse,

    -- * Response Lenses
    createProvisioningClaimResponse_certificateId,
    createProvisioningClaimResponse_certificatePem,
    createProvisioningClaimResponse_expiration,
    createProvisioningClaimResponse_keyPair,
    createProvisioningClaimResponse_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:/ 'newCreateProvisioningClaim' smart constructor.
data CreateProvisioningClaim = CreateProvisioningClaim'
  { -- | The name of the provisioning template to use.
    CreateProvisioningClaim -> Text
templateName :: Prelude.Text
  }
  deriving (CreateProvisioningClaim -> CreateProvisioningClaim -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateProvisioningClaim -> CreateProvisioningClaim -> Bool
$c/= :: CreateProvisioningClaim -> CreateProvisioningClaim -> Bool
== :: CreateProvisioningClaim -> CreateProvisioningClaim -> Bool
$c== :: CreateProvisioningClaim -> CreateProvisioningClaim -> Bool
Prelude.Eq, ReadPrec [CreateProvisioningClaim]
ReadPrec CreateProvisioningClaim
Int -> ReadS CreateProvisioningClaim
ReadS [CreateProvisioningClaim]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateProvisioningClaim]
$creadListPrec :: ReadPrec [CreateProvisioningClaim]
readPrec :: ReadPrec CreateProvisioningClaim
$creadPrec :: ReadPrec CreateProvisioningClaim
readList :: ReadS [CreateProvisioningClaim]
$creadList :: ReadS [CreateProvisioningClaim]
readsPrec :: Int -> ReadS CreateProvisioningClaim
$creadsPrec :: Int -> ReadS CreateProvisioningClaim
Prelude.Read, Int -> CreateProvisioningClaim -> ShowS
[CreateProvisioningClaim] -> ShowS
CreateProvisioningClaim -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateProvisioningClaim] -> ShowS
$cshowList :: [CreateProvisioningClaim] -> ShowS
show :: CreateProvisioningClaim -> String
$cshow :: CreateProvisioningClaim -> String
showsPrec :: Int -> CreateProvisioningClaim -> ShowS
$cshowsPrec :: Int -> CreateProvisioningClaim -> ShowS
Prelude.Show, forall x. Rep CreateProvisioningClaim x -> CreateProvisioningClaim
forall x. CreateProvisioningClaim -> Rep CreateProvisioningClaim x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateProvisioningClaim x -> CreateProvisioningClaim
$cfrom :: forall x. CreateProvisioningClaim -> Rep CreateProvisioningClaim x
Prelude.Generic)

-- |
-- Create a value of 'CreateProvisioningClaim' 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:
--
-- 'templateName', 'createProvisioningClaim_templateName' - The name of the provisioning template to use.
newCreateProvisioningClaim ::
  -- | 'templateName'
  Prelude.Text ->
  CreateProvisioningClaim
newCreateProvisioningClaim :: Text -> CreateProvisioningClaim
newCreateProvisioningClaim Text
pTemplateName_ =
  CreateProvisioningClaim'
    { $sel:templateName:CreateProvisioningClaim' :: Text
templateName =
        Text
pTemplateName_
    }

-- | The name of the provisioning template to use.
createProvisioningClaim_templateName :: Lens.Lens' CreateProvisioningClaim Prelude.Text
createProvisioningClaim_templateName :: Lens' CreateProvisioningClaim Text
createProvisioningClaim_templateName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateProvisioningClaim' {Text
templateName :: Text
$sel:templateName:CreateProvisioningClaim' :: CreateProvisioningClaim -> Text
templateName} -> Text
templateName) (\s :: CreateProvisioningClaim
s@CreateProvisioningClaim' {} Text
a -> CreateProvisioningClaim
s {$sel:templateName:CreateProvisioningClaim' :: Text
templateName = Text
a} :: CreateProvisioningClaim)

instance Core.AWSRequest CreateProvisioningClaim where
  type
    AWSResponse CreateProvisioningClaim =
      CreateProvisioningClaimResponse
  request :: (Service -> Service)
-> CreateProvisioningClaim -> Request CreateProvisioningClaim
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 CreateProvisioningClaim
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse CreateProvisioningClaim)))
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
-> Maybe Text
-> Maybe POSIX
-> Maybe KeyPair
-> Int
-> CreateProvisioningClaimResponse
CreateProvisioningClaimResponse'
            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
"certificateId")
            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
"certificatePem")
            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
"expiration")
            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
"keyPair")
            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 CreateProvisioningClaim where
  hashWithSalt :: Int -> CreateProvisioningClaim -> Int
hashWithSalt Int
_salt CreateProvisioningClaim' {Text
templateName :: Text
$sel:templateName:CreateProvisioningClaim' :: CreateProvisioningClaim -> Text
..} =
    Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
templateName

instance Prelude.NFData CreateProvisioningClaim where
  rnf :: CreateProvisioningClaim -> ()
rnf CreateProvisioningClaim' {Text
templateName :: Text
$sel:templateName:CreateProvisioningClaim' :: CreateProvisioningClaim -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
templateName

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

instance Data.ToJSON CreateProvisioningClaim where
  toJSON :: CreateProvisioningClaim -> Value
toJSON = forall a b. a -> b -> a
Prelude.const (Object -> Value
Data.Object forall a. Monoid a => a
Prelude.mempty)

instance Data.ToPath CreateProvisioningClaim where
  toPath :: CreateProvisioningClaim -> ByteString
toPath CreateProvisioningClaim' {Text
templateName :: Text
$sel:templateName:CreateProvisioningClaim' :: CreateProvisioningClaim -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/provisioning-templates/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
templateName,
        ByteString
"/provisioning-claim"
      ]

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

-- | /See:/ 'newCreateProvisioningClaimResponse' smart constructor.
data CreateProvisioningClaimResponse = CreateProvisioningClaimResponse'
  { -- | The ID of the certificate.
    CreateProvisioningClaimResponse -> Maybe Text
certificateId :: Prelude.Maybe Prelude.Text,
    -- | The provisioning claim certificate.
    CreateProvisioningClaimResponse -> Maybe Text
certificatePem :: Prelude.Maybe Prelude.Text,
    -- | The provisioning claim expiration time.
    CreateProvisioningClaimResponse -> Maybe POSIX
expiration :: Prelude.Maybe Data.POSIX,
    -- | The provisioning claim key pair.
    CreateProvisioningClaimResponse -> Maybe KeyPair
keyPair :: Prelude.Maybe KeyPair,
    -- | The response's http status code.
    CreateProvisioningClaimResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (CreateProvisioningClaimResponse
-> CreateProvisioningClaimResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateProvisioningClaimResponse
-> CreateProvisioningClaimResponse -> Bool
$c/= :: CreateProvisioningClaimResponse
-> CreateProvisioningClaimResponse -> Bool
== :: CreateProvisioningClaimResponse
-> CreateProvisioningClaimResponse -> Bool
$c== :: CreateProvisioningClaimResponse
-> CreateProvisioningClaimResponse -> Bool
Prelude.Eq, Int -> CreateProvisioningClaimResponse -> ShowS
[CreateProvisioningClaimResponse] -> ShowS
CreateProvisioningClaimResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateProvisioningClaimResponse] -> ShowS
$cshowList :: [CreateProvisioningClaimResponse] -> ShowS
show :: CreateProvisioningClaimResponse -> String
$cshow :: CreateProvisioningClaimResponse -> String
showsPrec :: Int -> CreateProvisioningClaimResponse -> ShowS
$cshowsPrec :: Int -> CreateProvisioningClaimResponse -> ShowS
Prelude.Show, forall x.
Rep CreateProvisioningClaimResponse x
-> CreateProvisioningClaimResponse
forall x.
CreateProvisioningClaimResponse
-> Rep CreateProvisioningClaimResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreateProvisioningClaimResponse x
-> CreateProvisioningClaimResponse
$cfrom :: forall x.
CreateProvisioningClaimResponse
-> Rep CreateProvisioningClaimResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreateProvisioningClaimResponse' 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:
--
-- 'certificateId', 'createProvisioningClaimResponse_certificateId' - The ID of the certificate.
--
-- 'certificatePem', 'createProvisioningClaimResponse_certificatePem' - The provisioning claim certificate.
--
-- 'expiration', 'createProvisioningClaimResponse_expiration' - The provisioning claim expiration time.
--
-- 'keyPair', 'createProvisioningClaimResponse_keyPair' - The provisioning claim key pair.
--
-- 'httpStatus', 'createProvisioningClaimResponse_httpStatus' - The response's http status code.
newCreateProvisioningClaimResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateProvisioningClaimResponse
newCreateProvisioningClaimResponse :: Int -> CreateProvisioningClaimResponse
newCreateProvisioningClaimResponse Int
pHttpStatus_ =
  CreateProvisioningClaimResponse'
    { $sel:certificateId:CreateProvisioningClaimResponse' :: Maybe Text
certificateId =
        forall a. Maybe a
Prelude.Nothing,
      $sel:certificatePem:CreateProvisioningClaimResponse' :: Maybe Text
certificatePem = forall a. Maybe a
Prelude.Nothing,
      $sel:expiration:CreateProvisioningClaimResponse' :: Maybe POSIX
expiration = forall a. Maybe a
Prelude.Nothing,
      $sel:keyPair:CreateProvisioningClaimResponse' :: Maybe KeyPair
keyPair = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CreateProvisioningClaimResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The ID of the certificate.
createProvisioningClaimResponse_certificateId :: Lens.Lens' CreateProvisioningClaimResponse (Prelude.Maybe Prelude.Text)
createProvisioningClaimResponse_certificateId :: Lens' CreateProvisioningClaimResponse (Maybe Text)
createProvisioningClaimResponse_certificateId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateProvisioningClaimResponse' {Maybe Text
certificateId :: Maybe Text
$sel:certificateId:CreateProvisioningClaimResponse' :: CreateProvisioningClaimResponse -> Maybe Text
certificateId} -> Maybe Text
certificateId) (\s :: CreateProvisioningClaimResponse
s@CreateProvisioningClaimResponse' {} Maybe Text
a -> CreateProvisioningClaimResponse
s {$sel:certificateId:CreateProvisioningClaimResponse' :: Maybe Text
certificateId = Maybe Text
a} :: CreateProvisioningClaimResponse)

-- | The provisioning claim certificate.
createProvisioningClaimResponse_certificatePem :: Lens.Lens' CreateProvisioningClaimResponse (Prelude.Maybe Prelude.Text)
createProvisioningClaimResponse_certificatePem :: Lens' CreateProvisioningClaimResponse (Maybe Text)
createProvisioningClaimResponse_certificatePem = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateProvisioningClaimResponse' {Maybe Text
certificatePem :: Maybe Text
$sel:certificatePem:CreateProvisioningClaimResponse' :: CreateProvisioningClaimResponse -> Maybe Text
certificatePem} -> Maybe Text
certificatePem) (\s :: CreateProvisioningClaimResponse
s@CreateProvisioningClaimResponse' {} Maybe Text
a -> CreateProvisioningClaimResponse
s {$sel:certificatePem:CreateProvisioningClaimResponse' :: Maybe Text
certificatePem = Maybe Text
a} :: CreateProvisioningClaimResponse)

-- | The provisioning claim expiration time.
createProvisioningClaimResponse_expiration :: Lens.Lens' CreateProvisioningClaimResponse (Prelude.Maybe Prelude.UTCTime)
createProvisioningClaimResponse_expiration :: Lens' CreateProvisioningClaimResponse (Maybe UTCTime)
createProvisioningClaimResponse_expiration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateProvisioningClaimResponse' {Maybe POSIX
expiration :: Maybe POSIX
$sel:expiration:CreateProvisioningClaimResponse' :: CreateProvisioningClaimResponse -> Maybe POSIX
expiration} -> Maybe POSIX
expiration) (\s :: CreateProvisioningClaimResponse
s@CreateProvisioningClaimResponse' {} Maybe POSIX
a -> CreateProvisioningClaimResponse
s {$sel:expiration:CreateProvisioningClaimResponse' :: Maybe POSIX
expiration = Maybe POSIX
a} :: CreateProvisioningClaimResponse) 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 (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The provisioning claim key pair.
createProvisioningClaimResponse_keyPair :: Lens.Lens' CreateProvisioningClaimResponse (Prelude.Maybe KeyPair)
createProvisioningClaimResponse_keyPair :: Lens' CreateProvisioningClaimResponse (Maybe KeyPair)
createProvisioningClaimResponse_keyPair = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateProvisioningClaimResponse' {Maybe KeyPair
keyPair :: Maybe KeyPair
$sel:keyPair:CreateProvisioningClaimResponse' :: CreateProvisioningClaimResponse -> Maybe KeyPair
keyPair} -> Maybe KeyPair
keyPair) (\s :: CreateProvisioningClaimResponse
s@CreateProvisioningClaimResponse' {} Maybe KeyPair
a -> CreateProvisioningClaimResponse
s {$sel:keyPair:CreateProvisioningClaimResponse' :: Maybe KeyPair
keyPair = Maybe KeyPair
a} :: CreateProvisioningClaimResponse)

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

instance
  Prelude.NFData
    CreateProvisioningClaimResponse
  where
  rnf :: CreateProvisioningClaimResponse -> ()
rnf CreateProvisioningClaimResponse' {Int
Maybe Text
Maybe POSIX
Maybe KeyPair
httpStatus :: Int
keyPair :: Maybe KeyPair
expiration :: Maybe POSIX
certificatePem :: Maybe Text
certificateId :: Maybe Text
$sel:httpStatus:CreateProvisioningClaimResponse' :: CreateProvisioningClaimResponse -> Int
$sel:keyPair:CreateProvisioningClaimResponse' :: CreateProvisioningClaimResponse -> Maybe KeyPair
$sel:expiration:CreateProvisioningClaimResponse' :: CreateProvisioningClaimResponse -> Maybe POSIX
$sel:certificatePem:CreateProvisioningClaimResponse' :: CreateProvisioningClaimResponse -> Maybe Text
$sel:certificateId:CreateProvisioningClaimResponse' :: CreateProvisioningClaimResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
certificateId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
certificatePem
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
expiration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe KeyPair
keyPair
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus