module Network.AWS.StorageGateway.DescribeUploadBuffer
    (
    
      describeUploadBuffer
    , DescribeUploadBuffer
    
    , dubGatewayARN
    
    , describeUploadBufferResponse
    , DescribeUploadBufferResponse
    
    , dubrsUploadBufferAllocatedInBytes
    , dubrsGatewayARN
    , dubrsDiskIds
    , dubrsUploadBufferUsedInBytes
    , dubrsStatus
    ) 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 DescribeUploadBuffer = DescribeUploadBuffer'
    { _dubGatewayARN :: Text
    } deriving (Eq,Read,Show,Data,Typeable,Generic)
describeUploadBuffer
    :: Text 
    -> DescribeUploadBuffer
describeUploadBuffer pGatewayARN_ =
    DescribeUploadBuffer'
    { _dubGatewayARN = pGatewayARN_
    }
dubGatewayARN :: Lens' DescribeUploadBuffer Text
dubGatewayARN = lens _dubGatewayARN (\ s a -> s{_dubGatewayARN = a});
instance AWSRequest DescribeUploadBuffer where
        type Rs DescribeUploadBuffer =
             DescribeUploadBufferResponse
        request = postJSON storageGateway
        response
          = receiveJSON
              (\ s h x ->
                 DescribeUploadBufferResponse' <$>
                   (x .?> "UploadBufferAllocatedInBytes") <*>
                     (x .?> "GatewayARN")
                     <*> (x .?> "DiskIds" .!@ mempty)
                     <*> (x .?> "UploadBufferUsedInBytes")
                     <*> (pure (fromEnum s)))
instance ToHeaders DescribeUploadBuffer where
        toHeaders
          = const
              (mconcat
                 ["X-Amz-Target" =#
                    ("StorageGateway_20130630.DescribeUploadBuffer" ::
                       ByteString),
                  "Content-Type" =#
                    ("application/x-amz-json-1.1" :: ByteString)])
instance ToJSON DescribeUploadBuffer where
        toJSON DescribeUploadBuffer'{..}
          = object
              (catMaybes [Just ("GatewayARN" .= _dubGatewayARN)])
instance ToPath DescribeUploadBuffer where
        toPath = const "/"
instance ToQuery DescribeUploadBuffer where
        toQuery = const mempty
data DescribeUploadBufferResponse = DescribeUploadBufferResponse'
    { _dubrsUploadBufferAllocatedInBytes :: !(Maybe Integer)
    , _dubrsGatewayARN                   :: !(Maybe Text)
    , _dubrsDiskIds                      :: !(Maybe [Text])
    , _dubrsUploadBufferUsedInBytes      :: !(Maybe Integer)
    , _dubrsStatus                       :: !Int
    } deriving (Eq,Read,Show,Data,Typeable,Generic)
describeUploadBufferResponse
    :: Int 
    -> DescribeUploadBufferResponse
describeUploadBufferResponse pStatus_ =
    DescribeUploadBufferResponse'
    { _dubrsUploadBufferAllocatedInBytes = Nothing
    , _dubrsGatewayARN = Nothing
    , _dubrsDiskIds = Nothing
    , _dubrsUploadBufferUsedInBytes = Nothing
    , _dubrsStatus = pStatus_
    }
dubrsUploadBufferAllocatedInBytes :: Lens' DescribeUploadBufferResponse (Maybe Integer)
dubrsUploadBufferAllocatedInBytes = lens _dubrsUploadBufferAllocatedInBytes (\ s a -> s{_dubrsUploadBufferAllocatedInBytes = a});
dubrsGatewayARN :: Lens' DescribeUploadBufferResponse (Maybe Text)
dubrsGatewayARN = lens _dubrsGatewayARN (\ s a -> s{_dubrsGatewayARN = a});
dubrsDiskIds :: Lens' DescribeUploadBufferResponse [Text]
dubrsDiskIds = lens _dubrsDiskIds (\ s a -> s{_dubrsDiskIds = a}) . _Default . _Coerce;
dubrsUploadBufferUsedInBytes :: Lens' DescribeUploadBufferResponse (Maybe Integer)
dubrsUploadBufferUsedInBytes = lens _dubrsUploadBufferUsedInBytes (\ s a -> s{_dubrsUploadBufferUsedInBytes = a});
dubrsStatus :: Lens' DescribeUploadBufferResponse Int
dubrsStatus = lens _dubrsStatus (\ s a -> s{_dubrsStatus = a});