{-# 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 #-}
module Network.AWS.EC2.CreateInstanceExportTask
    (
    
      createInstanceExportTask
    , CreateInstanceExportTask
    
    , cietTargetEnvironment
    , cietExportToS3Task
    , cietDescription
    , cietInstanceId
    
    , createInstanceExportTaskResponse
    , CreateInstanceExportTaskResponse
    
    , cietrsExportTask
    , cietrsResponseStatus
    ) 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
data CreateInstanceExportTask = CreateInstanceExportTask'
  { _cietTargetEnvironment :: !(Maybe ExportEnvironment)
  , _cietExportToS3Task    :: !(Maybe ExportToS3TaskSpecification)
  , _cietDescription       :: !(Maybe Text)
  , _cietInstanceId        :: !Text
  } deriving (Eq, Read, Show, Data, Typeable, Generic)
createInstanceExportTask
    :: Text 
    -> CreateInstanceExportTask
createInstanceExportTask pInstanceId_ =
  CreateInstanceExportTask'
    { _cietTargetEnvironment = Nothing
    , _cietExportToS3Task = Nothing
    , _cietDescription = Nothing
    , _cietInstanceId = pInstanceId_
    }
cietTargetEnvironment :: Lens' CreateInstanceExportTask (Maybe ExportEnvironment)
cietTargetEnvironment = lens _cietTargetEnvironment (\ s a -> s{_cietTargetEnvironment = a})
cietExportToS3Task :: Lens' CreateInstanceExportTask (Maybe ExportToS3TaskSpecification)
cietExportToS3Task = lens _cietExportToS3Task (\ s a -> s{_cietExportToS3Task = a})
cietDescription :: Lens' CreateInstanceExportTask (Maybe Text)
cietDescription = lens _cietDescription (\ s a -> s{_cietDescription = a})
cietInstanceId :: Lens' CreateInstanceExportTask Text
cietInstanceId = lens _cietInstanceId (\ s a -> s{_cietInstanceId = a})
instance AWSRequest CreateInstanceExportTask where
        type Rs CreateInstanceExportTask =
             CreateInstanceExportTaskResponse
        request = postQuery ec2
        response
          = receiveXML
              (\ s h x ->
                 CreateInstanceExportTaskResponse' <$>
                   (x .@? "exportTask") <*> (pure (fromEnum s)))
instance Hashable CreateInstanceExportTask where
instance NFData CreateInstanceExportTask where
instance ToHeaders CreateInstanceExportTask where
        toHeaders = const mempty
instance ToPath CreateInstanceExportTask where
        toPath = const "/"
instance ToQuery CreateInstanceExportTask where
        toQuery CreateInstanceExportTask'{..}
          = mconcat
              ["Action" =:
                 ("CreateInstanceExportTask" :: ByteString),
               "Version" =: ("2016-11-15" :: ByteString),
               "TargetEnvironment" =: _cietTargetEnvironment,
               "ExportToS3" =: _cietExportToS3Task,
               "Description" =: _cietDescription,
               "InstanceId" =: _cietInstanceId]
data CreateInstanceExportTaskResponse = CreateInstanceExportTaskResponse'
  { _cietrsExportTask     :: !(Maybe ExportTask)
  , _cietrsResponseStatus :: !Int
  } deriving (Eq, Read, Show, Data, Typeable, Generic)
createInstanceExportTaskResponse
    :: Int 
    -> CreateInstanceExportTaskResponse
createInstanceExportTaskResponse pResponseStatus_ =
  CreateInstanceExportTaskResponse'
    {_cietrsExportTask = Nothing, _cietrsResponseStatus = pResponseStatus_}
cietrsExportTask :: Lens' CreateInstanceExportTaskResponse (Maybe ExportTask)
cietrsExportTask = lens _cietrsExportTask (\ s a -> s{_cietrsExportTask = a})
cietrsResponseStatus :: Lens' CreateInstanceExportTaskResponse Int
cietrsResponseStatus = lens _cietrsResponseStatus (\ s a -> s{_cietrsResponseStatus = a})
instance NFData CreateInstanceExportTaskResponse
         where