{-# 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.ModifyVolumeAttribute
-- 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)
--
-- Modifies a volume attribute.
--
-- By default, all I\/O operations for the volume are suspended when the data on the volume is determined to be potentially inconsistent, to prevent undetectable, latent data corruption. The I\/O access to the volume can be resumed by first enabling I\/O access and then checking the data consistency on your volume.
--
-- You can change the default behavior to resume I\/O operations. We recommend that you change this only for boot volumes or for volumes that are stateless or disposable.
module Network.AWS.EC2.ModifyVolumeAttribute
    (
    -- * Creating a Request
      modifyVolumeAttribute
    , ModifyVolumeAttribute
    -- * Request Lenses
    , mvaAutoEnableIO
    , mvaDryRun
    , mvaVolumeId

    -- * Destructuring the Response
    , modifyVolumeAttributeResponse
    , ModifyVolumeAttributeResponse
    ) 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 ModifyVolumeAttribute.
--
-- /See:/ 'modifyVolumeAttribute' smart constructor.
data ModifyVolumeAttribute = ModifyVolumeAttribute'
    { _mvaAutoEnableIO :: !(Maybe AttributeBooleanValue)
    , _mvaDryRun       :: !(Maybe Bool)
    , _mvaVolumeId     :: !Text
    } deriving (Eq,Read,Show,Data,Typeable,Generic)

-- | Creates a value of 'ModifyVolumeAttribute' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'mvaAutoEnableIO'
--
-- * 'mvaDryRun'
--
-- * 'mvaVolumeId'
modifyVolumeAttribute
    :: Text -- ^ 'mvaVolumeId'
    -> ModifyVolumeAttribute
modifyVolumeAttribute pVolumeId_ =
    ModifyVolumeAttribute'
    { _mvaAutoEnableIO = Nothing
    , _mvaDryRun = Nothing
    , _mvaVolumeId = pVolumeId_
    }

-- | Indicates whether the volume should be auto-enabled for I\/O operations.
mvaAutoEnableIO :: Lens' ModifyVolumeAttribute (Maybe AttributeBooleanValue)
mvaAutoEnableIO = lens _mvaAutoEnableIO (\ s a -> s{_mvaAutoEnableIO = 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'.
mvaDryRun :: Lens' ModifyVolumeAttribute (Maybe Bool)
mvaDryRun = lens _mvaDryRun (\ s a -> s{_mvaDryRun = a});

-- | The ID of the volume.
mvaVolumeId :: Lens' ModifyVolumeAttribute Text
mvaVolumeId = lens _mvaVolumeId (\ s a -> s{_mvaVolumeId = a});

instance AWSRequest ModifyVolumeAttribute where
        type Rs ModifyVolumeAttribute =
             ModifyVolumeAttributeResponse
        request = postQuery ec2
        response = receiveNull ModifyVolumeAttributeResponse'

instance Hashable ModifyVolumeAttribute

instance NFData ModifyVolumeAttribute

instance ToHeaders ModifyVolumeAttribute where
        toHeaders = const mempty

instance ToPath ModifyVolumeAttribute where
        toPath = const "/"

instance ToQuery ModifyVolumeAttribute where
        toQuery ModifyVolumeAttribute'{..}
          = mconcat
              ["Action" =: ("ModifyVolumeAttribute" :: ByteString),
               "Version" =: ("2016-04-01" :: ByteString),
               "AutoEnableIO" =: _mvaAutoEnableIO,
               "DryRun" =: _mvaDryRun, "VolumeId" =: _mvaVolumeId]

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

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

instance NFData ModifyVolumeAttributeResponse