{-# 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.EC2.CancelConversionTask
-- 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 an active conversion task. The task can be the import of an instance or volume. The action removes all artifacts of the conversion, including a partially uploaded volume or instance. If the conversion is complete or is in the process of transferring the final disk image, the command fails and returns an exception.
--
-- For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/ec2-cli-vmimport-export.html Importing a Virtual Machine Using the Amazon EC2 CLI>.
module Network.AWS.EC2.CancelConversionTask
    (
    -- * Creating a Request
      cancelConversionTask
    , CancelConversionTask
    -- * Request Lenses
    , cctReasonMessage
    , cctDryRun
    , cctConversionTaskId

    -- * Destructuring the Response
    , cancelConversionTaskResponse
    , CancelConversionTaskResponse
    ) where

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

-- | Contains the parameters for CancelConversionTask.
--
-- /See:/ 'cancelConversionTask' smart constructor.
data CancelConversionTask = CancelConversionTask'
    { _cctReasonMessage    :: !(Maybe Text)
    , _cctDryRun           :: !(Maybe Bool)
    , _cctConversionTaskId :: !Text
    } deriving (Eq,Read,Show,Data,Typeable,Generic)

-- | Creates a value of 'CancelConversionTask' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'cctReasonMessage'
--
-- * 'cctDryRun'
--
-- * 'cctConversionTaskId'
cancelConversionTask
    :: Text -- ^ 'cctConversionTaskId'
    -> CancelConversionTask
cancelConversionTask pConversionTaskId_ =
    CancelConversionTask'
    { _cctReasonMessage = Nothing
    , _cctDryRun = Nothing
    , _cctConversionTaskId = pConversionTaskId_
    }

-- | The reason for canceling the conversion task.
cctReasonMessage :: Lens' CancelConversionTask (Maybe Text)
cctReasonMessage = lens _cctReasonMessage (\ s a -> s{_cctReasonMessage = a});

-- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is 'DryRunOperation'. Otherwise, it is 'UnauthorizedOperation'.
cctDryRun :: Lens' CancelConversionTask (Maybe Bool)
cctDryRun = lens _cctDryRun (\ s a -> s{_cctDryRun = a});

-- | The ID of the conversion task.
cctConversionTaskId :: Lens' CancelConversionTask Text
cctConversionTaskId = lens _cctConversionTaskId (\ s a -> s{_cctConversionTaskId = a});

instance AWSRequest CancelConversionTask where
        type Rs CancelConversionTask =
             CancelConversionTaskResponse
        request = postQuery ec2
        response = receiveNull CancelConversionTaskResponse'

instance Hashable CancelConversionTask

instance NFData CancelConversionTask

instance ToHeaders CancelConversionTask where
        toHeaders = const mempty

instance ToPath CancelConversionTask where
        toPath = const "/"

instance ToQuery CancelConversionTask where
        toQuery CancelConversionTask'{..}
          = mconcat
              ["Action" =: ("CancelConversionTask" :: ByteString),
               "Version" =: ("2016-04-01" :: ByteString),
               "ReasonMessage" =: _cctReasonMessage,
               "DryRun" =: _cctDryRun,
               "ConversionTaskId" =: _cctConversionTaskId]

-- | /See:/ 'cancelConversionTaskResponse' smart constructor.
data CancelConversionTaskResponse =
    CancelConversionTaskResponse'
    deriving (Eq,Read,Show,Data,Typeable,Generic)

-- | Creates a value of 'CancelConversionTaskResponse' with the minimum fields required to make a request.
--
cancelConversionTaskResponse
    :: CancelConversionTaskResponse
cancelConversionTaskResponse = CancelConversionTaskResponse'

instance NFData CancelConversionTaskResponse