module Network.AWS.StorageGateway.DescribeBandwidthRateLimit
    (
    
      describeBandwidthRateLimit
    , DescribeBandwidthRateLimit
    
    , dbrlGatewayARN
    
    , describeBandwidthRateLimitResponse
    , DescribeBandwidthRateLimitResponse
    
    , dbrlrsGatewayARN
    , dbrlrsAverageUploadRateLimitInBitsPerSec
    , dbrlrsAverageDownloadRateLimitInBitsPerSec
    , dbrlrsStatus
    ) where
import           Network.AWS.Prelude
import           Network.AWS.Request
import           Network.AWS.Response
import           Network.AWS.StorageGateway.Types
import           Network.AWS.StorageGateway.Types.Product
newtype DescribeBandwidthRateLimit = DescribeBandwidthRateLimit'
    { _dbrlGatewayARN :: Text
    } deriving (Eq,Read,Show,Data,Typeable,Generic)
describeBandwidthRateLimit
    :: Text 
    -> DescribeBandwidthRateLimit
describeBandwidthRateLimit pGatewayARN_ =
    DescribeBandwidthRateLimit'
    { _dbrlGatewayARN = pGatewayARN_
    }
dbrlGatewayARN :: Lens' DescribeBandwidthRateLimit Text
dbrlGatewayARN = lens _dbrlGatewayARN (\ s a -> s{_dbrlGatewayARN = a});
instance AWSRequest DescribeBandwidthRateLimit where
        type Rs DescribeBandwidthRateLimit =
             DescribeBandwidthRateLimitResponse
        request = postJSON storageGateway
        response
          = receiveJSON
              (\ s h x ->
                 DescribeBandwidthRateLimitResponse' <$>
                   (x .?> "GatewayARN") <*>
                     (x .?> "AverageUploadRateLimitInBitsPerSec")
                     <*> (x .?> "AverageDownloadRateLimitInBitsPerSec")
                     <*> (pure (fromEnum s)))
instance ToHeaders DescribeBandwidthRateLimit where
        toHeaders
          = const
              (mconcat
                 ["X-Amz-Target" =#
                    ("StorageGateway_20130630.DescribeBandwidthRateLimit"
                       :: ByteString),
                  "Content-Type" =#
                    ("application/x-amz-json-1.1" :: ByteString)])
instance ToJSON DescribeBandwidthRateLimit where
        toJSON DescribeBandwidthRateLimit'{..}
          = object
              (catMaybes [Just ("GatewayARN" .= _dbrlGatewayARN)])
instance ToPath DescribeBandwidthRateLimit where
        toPath = const "/"
instance ToQuery DescribeBandwidthRateLimit where
        toQuery = const mempty
data DescribeBandwidthRateLimitResponse = DescribeBandwidthRateLimitResponse'
    { _dbrlrsGatewayARN                           :: !(Maybe Text)
    , _dbrlrsAverageUploadRateLimitInBitsPerSec   :: !(Maybe Nat)
    , _dbrlrsAverageDownloadRateLimitInBitsPerSec :: !(Maybe Nat)
    , _dbrlrsStatus                               :: !Int
    } deriving (Eq,Read,Show,Data,Typeable,Generic)
describeBandwidthRateLimitResponse
    :: Int 
    -> DescribeBandwidthRateLimitResponse
describeBandwidthRateLimitResponse pStatus_ =
    DescribeBandwidthRateLimitResponse'
    { _dbrlrsGatewayARN = Nothing
    , _dbrlrsAverageUploadRateLimitInBitsPerSec = Nothing
    , _dbrlrsAverageDownloadRateLimitInBitsPerSec = Nothing
    , _dbrlrsStatus = pStatus_
    }
dbrlrsGatewayARN :: Lens' DescribeBandwidthRateLimitResponse (Maybe Text)
dbrlrsGatewayARN = lens _dbrlrsGatewayARN (\ s a -> s{_dbrlrsGatewayARN = a});
dbrlrsAverageUploadRateLimitInBitsPerSec :: Lens' DescribeBandwidthRateLimitResponse (Maybe Natural)
dbrlrsAverageUploadRateLimitInBitsPerSec = lens _dbrlrsAverageUploadRateLimitInBitsPerSec (\ s a -> s{_dbrlrsAverageUploadRateLimitInBitsPerSec = a}) . mapping _Nat;
dbrlrsAverageDownloadRateLimitInBitsPerSec :: Lens' DescribeBandwidthRateLimitResponse (Maybe Natural)
dbrlrsAverageDownloadRateLimitInBitsPerSec = lens _dbrlrsAverageDownloadRateLimitInBitsPerSec (\ s a -> s{_dbrlrsAverageDownloadRateLimitInBitsPerSec = a}) . mapping _Nat;
dbrlrsStatus :: Lens' DescribeBandwidthRateLimitResponse Int
dbrlrsStatus = lens _dbrlrsStatus (\ s a -> s{_dbrlrsStatus = a});