{-# 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.RejectCertificateTransfer
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Rejects a pending certificate transfer. After IoT rejects a certificate
-- transfer, the certificate status changes from __PENDING_TRANSFER__ to
-- __INACTIVE__.
--
-- To check for pending certificate transfers, call ListCertificates to
-- enumerate your certificates.
--
-- This operation can only be called by the transfer destination. After it
-- is called, the certificate will be returned to the source\'s account in
-- the INACTIVE state.
--
-- Requires permission to access the
-- <https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html#awsiot-actions-as-permissions RejectCertificateTransfer>
-- action.
module Amazonka.IoT.RejectCertificateTransfer
  ( -- * Creating a Request
    RejectCertificateTransfer (..),
    newRejectCertificateTransfer,

    -- * Request Lenses
    rejectCertificateTransfer_rejectReason,
    rejectCertificateTransfer_certificateId,

    -- * Destructuring the Response
    RejectCertificateTransferResponse (..),
    newRejectCertificateTransferResponse,
  )
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

-- | The input for the RejectCertificateTransfer operation.
--
-- /See:/ 'newRejectCertificateTransfer' smart constructor.
data RejectCertificateTransfer = RejectCertificateTransfer'
  { -- | The reason the certificate transfer was rejected.
    RejectCertificateTransfer -> Maybe Text
rejectReason :: Prelude.Maybe Prelude.Text,
    -- | The ID of the certificate. (The last part of the certificate ARN
    -- contains the certificate ID.)
    RejectCertificateTransfer -> Text
certificateId :: Prelude.Text
  }
  deriving (RejectCertificateTransfer -> RejectCertificateTransfer -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RejectCertificateTransfer -> RejectCertificateTransfer -> Bool
$c/= :: RejectCertificateTransfer -> RejectCertificateTransfer -> Bool
== :: RejectCertificateTransfer -> RejectCertificateTransfer -> Bool
$c== :: RejectCertificateTransfer -> RejectCertificateTransfer -> Bool
Prelude.Eq, ReadPrec [RejectCertificateTransfer]
ReadPrec RejectCertificateTransfer
Int -> ReadS RejectCertificateTransfer
ReadS [RejectCertificateTransfer]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [RejectCertificateTransfer]
$creadListPrec :: ReadPrec [RejectCertificateTransfer]
readPrec :: ReadPrec RejectCertificateTransfer
$creadPrec :: ReadPrec RejectCertificateTransfer
readList :: ReadS [RejectCertificateTransfer]
$creadList :: ReadS [RejectCertificateTransfer]
readsPrec :: Int -> ReadS RejectCertificateTransfer
$creadsPrec :: Int -> ReadS RejectCertificateTransfer
Prelude.Read, Int -> RejectCertificateTransfer -> ShowS
[RejectCertificateTransfer] -> ShowS
RejectCertificateTransfer -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RejectCertificateTransfer] -> ShowS
$cshowList :: [RejectCertificateTransfer] -> ShowS
show :: RejectCertificateTransfer -> String
$cshow :: RejectCertificateTransfer -> String
showsPrec :: Int -> RejectCertificateTransfer -> ShowS
$cshowsPrec :: Int -> RejectCertificateTransfer -> ShowS
Prelude.Show, forall x.
Rep RejectCertificateTransfer x -> RejectCertificateTransfer
forall x.
RejectCertificateTransfer -> Rep RejectCertificateTransfer x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep RejectCertificateTransfer x -> RejectCertificateTransfer
$cfrom :: forall x.
RejectCertificateTransfer -> Rep RejectCertificateTransfer x
Prelude.Generic)

-- |
-- Create a value of 'RejectCertificateTransfer' 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:
--
-- 'rejectReason', 'rejectCertificateTransfer_rejectReason' - The reason the certificate transfer was rejected.
--
-- 'certificateId', 'rejectCertificateTransfer_certificateId' - The ID of the certificate. (The last part of the certificate ARN
-- contains the certificate ID.)
newRejectCertificateTransfer ::
  -- | 'certificateId'
  Prelude.Text ->
  RejectCertificateTransfer
newRejectCertificateTransfer :: Text -> RejectCertificateTransfer
newRejectCertificateTransfer Text
pCertificateId_ =
  RejectCertificateTransfer'
    { $sel:rejectReason:RejectCertificateTransfer' :: Maybe Text
rejectReason =
        forall a. Maybe a
Prelude.Nothing,
      $sel:certificateId:RejectCertificateTransfer' :: Text
certificateId = Text
pCertificateId_
    }

-- | The reason the certificate transfer was rejected.
rejectCertificateTransfer_rejectReason :: Lens.Lens' RejectCertificateTransfer (Prelude.Maybe Prelude.Text)
rejectCertificateTransfer_rejectReason :: Lens' RejectCertificateTransfer (Maybe Text)
rejectCertificateTransfer_rejectReason = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RejectCertificateTransfer' {Maybe Text
rejectReason :: Maybe Text
$sel:rejectReason:RejectCertificateTransfer' :: RejectCertificateTransfer -> Maybe Text
rejectReason} -> Maybe Text
rejectReason) (\s :: RejectCertificateTransfer
s@RejectCertificateTransfer' {} Maybe Text
a -> RejectCertificateTransfer
s {$sel:rejectReason:RejectCertificateTransfer' :: Maybe Text
rejectReason = Maybe Text
a} :: RejectCertificateTransfer)

-- | The ID of the certificate. (The last part of the certificate ARN
-- contains the certificate ID.)
rejectCertificateTransfer_certificateId :: Lens.Lens' RejectCertificateTransfer Prelude.Text
rejectCertificateTransfer_certificateId :: Lens' RejectCertificateTransfer Text
rejectCertificateTransfer_certificateId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\RejectCertificateTransfer' {Text
certificateId :: Text
$sel:certificateId:RejectCertificateTransfer' :: RejectCertificateTransfer -> Text
certificateId} -> Text
certificateId) (\s :: RejectCertificateTransfer
s@RejectCertificateTransfer' {} Text
a -> RejectCertificateTransfer
s {$sel:certificateId:RejectCertificateTransfer' :: Text
certificateId = Text
a} :: RejectCertificateTransfer)

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

instance Prelude.Hashable RejectCertificateTransfer where
  hashWithSalt :: Int -> RejectCertificateTransfer -> Int
hashWithSalt Int
_salt RejectCertificateTransfer' {Maybe Text
Text
certificateId :: Text
rejectReason :: Maybe Text
$sel:certificateId:RejectCertificateTransfer' :: RejectCertificateTransfer -> Text
$sel:rejectReason:RejectCertificateTransfer' :: RejectCertificateTransfer -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
rejectReason
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
certificateId

instance Prelude.NFData RejectCertificateTransfer where
  rnf :: RejectCertificateTransfer -> ()
rnf RejectCertificateTransfer' {Maybe Text
Text
certificateId :: Text
rejectReason :: Maybe Text
$sel:certificateId:RejectCertificateTransfer' :: RejectCertificateTransfer -> Text
$sel:rejectReason:RejectCertificateTransfer' :: RejectCertificateTransfer -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
rejectReason
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
certificateId

instance Data.ToHeaders RejectCertificateTransfer where
  toHeaders :: RejectCertificateTransfer -> [Header]
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

instance Data.ToJSON RejectCertificateTransfer where
  toJSON :: RejectCertificateTransfer -> Value
toJSON RejectCertificateTransfer' {Maybe Text
Text
certificateId :: Text
rejectReason :: Maybe Text
$sel:certificateId:RejectCertificateTransfer' :: RejectCertificateTransfer -> Text
$sel:rejectReason:RejectCertificateTransfer' :: RejectCertificateTransfer -> Maybe Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [(Key
"rejectReason" 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 Text
rejectReason]
      )

instance Data.ToPath RejectCertificateTransfer where
  toPath :: RejectCertificateTransfer -> ByteString
toPath RejectCertificateTransfer' {Maybe Text
Text
certificateId :: Text
rejectReason :: Maybe Text
$sel:certificateId:RejectCertificateTransfer' :: RejectCertificateTransfer -> Text
$sel:rejectReason:RejectCertificateTransfer' :: RejectCertificateTransfer -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/reject-certificate-transfer/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
certificateId
      ]

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

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

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

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