{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric      #-}
{-# LANGUAGE OverloadedStrings  #-}
{-# LANGUAGE RecordWildCards    #-}
{-# LANGUAGE TypeFamilies       #-}

{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Network.AWS.KMS.CancelKeyDeletion
-- Copyright   : (c) 2013-2016 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Cancels the deletion of a customer master key (CMK). When this operation is successful, the CMK is set to the @Disabled@ state. To enable a CMK, use 'EnableKey' .
--
--
-- For more information about scheduling and canceling deletion of a CMK, see <http://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys.html Deleting Customer Master Keys> in the /AWS Key Management Service Developer Guide/ .
--
module Network.AWS.KMS.CancelKeyDeletion
    (
    -- * Creating a Request
      cancelKeyDeletion
    , CancelKeyDeletion
    -- * Request Lenses
    , ckdKeyId

    -- * Destructuring the Response
    , cancelKeyDeletionResponse
    , CancelKeyDeletionResponse
    -- * Response Lenses
    , ckdrsKeyId
    , ckdrsResponseStatus
    ) where

import           Network.AWS.KMS.Types
import           Network.AWS.KMS.Types.Product
import           Network.AWS.Lens
import           Network.AWS.Prelude
import           Network.AWS.Request
import           Network.AWS.Response

-- | /See:/ 'cancelKeyDeletion' smart constructor.
newtype CancelKeyDeletion = CancelKeyDeletion'
    { _ckdKeyId :: Text
    } deriving (Eq,Read,Show,Data,Typeable,Generic)

-- | Creates a value of 'CancelKeyDeletion' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'ckdKeyId' - The unique identifier for the customer master key (CMK) for which to cancel deletion. To specify this value, use the unique key ID or the Amazon Resource Name (ARN) of the CMK. Examples:     * Unique key ID: 1234abcd-12ab-34cd-56ef-1234567890ab     * Key ARN: arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab To obtain the unique key ID and key ARN for a given CMK, use 'ListKeys' or 'DescribeKey' .
cancelKeyDeletion
    :: Text -- ^ 'ckdKeyId'
    -> CancelKeyDeletion
cancelKeyDeletion pKeyId_ =
    CancelKeyDeletion'
    { _ckdKeyId = pKeyId_
    }

-- | The unique identifier for the customer master key (CMK) for which to cancel deletion. To specify this value, use the unique key ID or the Amazon Resource Name (ARN) of the CMK. Examples:     * Unique key ID: 1234abcd-12ab-34cd-56ef-1234567890ab     * Key ARN: arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab To obtain the unique key ID and key ARN for a given CMK, use 'ListKeys' or 'DescribeKey' .
ckdKeyId :: Lens' CancelKeyDeletion Text
ckdKeyId = lens _ckdKeyId (\ s a -> s{_ckdKeyId = a});

instance AWSRequest CancelKeyDeletion where
        type Rs CancelKeyDeletion = CancelKeyDeletionResponse
        request = postJSON kms
        response
          = receiveJSON
              (\ s h x ->
                 CancelKeyDeletionResponse' <$>
                   (x .?> "KeyId") <*> (pure (fromEnum s)))

instance Hashable CancelKeyDeletion

instance NFData CancelKeyDeletion

instance ToHeaders CancelKeyDeletion where
        toHeaders
          = const
              (mconcat
                 ["X-Amz-Target" =#
                    ("TrentService.CancelKeyDeletion" :: ByteString),
                  "Content-Type" =#
                    ("application/x-amz-json-1.1" :: ByteString)])

instance ToJSON CancelKeyDeletion where
        toJSON CancelKeyDeletion'{..}
          = object (catMaybes [Just ("KeyId" .= _ckdKeyId)])

instance ToPath CancelKeyDeletion where
        toPath = const "/"

instance ToQuery CancelKeyDeletion where
        toQuery = const mempty

-- | /See:/ 'cancelKeyDeletionResponse' smart constructor.
data CancelKeyDeletionResponse = CancelKeyDeletionResponse'
    { _ckdrsKeyId          :: !(Maybe Text)
    , _ckdrsResponseStatus :: !Int
    } deriving (Eq,Read,Show,Data,Typeable,Generic)

-- | Creates a value of 'CancelKeyDeletionResponse' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'ckdrsKeyId' - The unique identifier of the master key for which deletion is canceled.
--
-- * 'ckdrsResponseStatus' - -- | The response status code.
cancelKeyDeletionResponse
    :: Int -- ^ 'ckdrsResponseStatus'
    -> CancelKeyDeletionResponse
cancelKeyDeletionResponse pResponseStatus_ =
    CancelKeyDeletionResponse'
    { _ckdrsKeyId = Nothing
    , _ckdrsResponseStatus = pResponseStatus_
    }

-- | The unique identifier of the master key for which deletion is canceled.
ckdrsKeyId :: Lens' CancelKeyDeletionResponse (Maybe Text)
ckdrsKeyId = lens _ckdrsKeyId (\ s a -> s{_ckdrsKeyId = a});

-- | -- | The response status code.
ckdrsResponseStatus :: Lens' CancelKeyDeletionResponse Int
ckdrsResponseStatus = lens _ckdrsResponseStatus (\ s a -> s{_ckdrsResponseStatus = a});

instance NFData CancelKeyDeletionResponse