module Network.AWS.StorageGateway.UpdateBandwidthRateLimit
    (
    
      updateBandwidthRateLimit
    , UpdateBandwidthRateLimit
    
    , ubrlAverageUploadRateLimitInBitsPerSec
    , ubrlAverageDownloadRateLimitInBitsPerSec
    , ubrlGatewayARN
    
    , updateBandwidthRateLimitResponse
    , UpdateBandwidthRateLimitResponse
    
    , ubrlrsGatewayARN
    , ubrlrsStatus
    ) where
import           Network.AWS.Prelude
import           Network.AWS.Request
import           Network.AWS.Response
import           Network.AWS.StorageGateway.Types
import           Network.AWS.StorageGateway.Types.Product
data UpdateBandwidthRateLimit = UpdateBandwidthRateLimit'
    { _ubrlAverageUploadRateLimitInBitsPerSec   :: !(Maybe Nat)
    , _ubrlAverageDownloadRateLimitInBitsPerSec :: !(Maybe Nat)
    , _ubrlGatewayARN                           :: !Text
    } deriving (Eq,Read,Show,Data,Typeable,Generic)
updateBandwidthRateLimit
    :: Text 
    -> UpdateBandwidthRateLimit
updateBandwidthRateLimit pGatewayARN_ =
    UpdateBandwidthRateLimit'
    { _ubrlAverageUploadRateLimitInBitsPerSec = Nothing
    , _ubrlAverageDownloadRateLimitInBitsPerSec = Nothing
    , _ubrlGatewayARN = pGatewayARN_
    }
ubrlAverageUploadRateLimitInBitsPerSec :: Lens' UpdateBandwidthRateLimit (Maybe Natural)
ubrlAverageUploadRateLimitInBitsPerSec = lens _ubrlAverageUploadRateLimitInBitsPerSec (\ s a -> s{_ubrlAverageUploadRateLimitInBitsPerSec = a}) . mapping _Nat;
ubrlAverageDownloadRateLimitInBitsPerSec :: Lens' UpdateBandwidthRateLimit (Maybe Natural)
ubrlAverageDownloadRateLimitInBitsPerSec = lens _ubrlAverageDownloadRateLimitInBitsPerSec (\ s a -> s{_ubrlAverageDownloadRateLimitInBitsPerSec = a}) . mapping _Nat;
ubrlGatewayARN :: Lens' UpdateBandwidthRateLimit Text
ubrlGatewayARN = lens _ubrlGatewayARN (\ s a -> s{_ubrlGatewayARN = a});
instance AWSRequest UpdateBandwidthRateLimit where
        type Rs UpdateBandwidthRateLimit =
             UpdateBandwidthRateLimitResponse
        request = postJSON storageGateway
        response
          = receiveJSON
              (\ s h x ->
                 UpdateBandwidthRateLimitResponse' <$>
                   (x .?> "GatewayARN") <*> (pure (fromEnum s)))
instance ToHeaders UpdateBandwidthRateLimit where
        toHeaders
          = const
              (mconcat
                 ["X-Amz-Target" =#
                    ("StorageGateway_20130630.UpdateBandwidthRateLimit"
                       :: ByteString),
                  "Content-Type" =#
                    ("application/x-amz-json-1.1" :: ByteString)])
instance ToJSON UpdateBandwidthRateLimit where
        toJSON UpdateBandwidthRateLimit'{..}
          = object
              (catMaybes
                 [("AverageUploadRateLimitInBitsPerSec" .=) <$>
                    _ubrlAverageUploadRateLimitInBitsPerSec,
                  ("AverageDownloadRateLimitInBitsPerSec" .=) <$>
                    _ubrlAverageDownloadRateLimitInBitsPerSec,
                  Just ("GatewayARN" .= _ubrlGatewayARN)])
instance ToPath UpdateBandwidthRateLimit where
        toPath = const "/"
instance ToQuery UpdateBandwidthRateLimit where
        toQuery = const mempty
data UpdateBandwidthRateLimitResponse = UpdateBandwidthRateLimitResponse'
    { _ubrlrsGatewayARN :: !(Maybe Text)
    , _ubrlrsStatus     :: !Int
    } deriving (Eq,Read,Show,Data,Typeable,Generic)
updateBandwidthRateLimitResponse
    :: Int 
    -> UpdateBandwidthRateLimitResponse
updateBandwidthRateLimitResponse pStatus_ =
    UpdateBandwidthRateLimitResponse'
    { _ubrlrsGatewayARN = Nothing
    , _ubrlrsStatus = pStatus_
    }
ubrlrsGatewayARN :: Lens' UpdateBandwidthRateLimitResponse (Maybe Text)
ubrlrsGatewayARN = lens _ubrlrsGatewayARN (\ s a -> s{_ubrlrsGatewayARN = a});
ubrlrsStatus :: Lens' UpdateBandwidthRateLimitResponse Int
ubrlrsStatus = lens _ubrlrsStatus (\ s a -> s{_ubrlrsStatus = a});