module Network.AWS.StorageGateway.DescribeUploadBuffer
    (
    
      DescribeUploadBuffer
    
    , describeUploadBuffer
    
    , dubGatewayARN
    
    , DescribeUploadBufferResponse
    
    , describeUploadBufferResponse
    
    , dubrDiskIds
    , dubrGatewayARN
    , dubrUploadBufferAllocatedInBytes
    , dubrUploadBufferUsedInBytes
    ) where
import Network.AWS.Prelude
import Network.AWS.Request.JSON
import Network.AWS.StorageGateway.Types
import qualified GHC.Exts
newtype DescribeUploadBuffer = DescribeUploadBuffer
    { _dubGatewayARN :: Text
    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
describeUploadBuffer :: Text 
                     -> DescribeUploadBuffer
describeUploadBuffer p1 = DescribeUploadBuffer
    { _dubGatewayARN = p1
    }
dubGatewayARN :: Lens' DescribeUploadBuffer Text
dubGatewayARN = lens _dubGatewayARN (\s a -> s { _dubGatewayARN = a })
data DescribeUploadBufferResponse = DescribeUploadBufferResponse
    { _dubrDiskIds                      :: List "DiskIds" Text
    , _dubrGatewayARN                   :: Maybe Text
    , _dubrUploadBufferAllocatedInBytes :: Maybe Integer
    , _dubrUploadBufferUsedInBytes      :: Maybe Integer
    } deriving (Eq, Ord, Read, Show)
describeUploadBufferResponse :: DescribeUploadBufferResponse
describeUploadBufferResponse = DescribeUploadBufferResponse
    { _dubrGatewayARN                   = Nothing
    , _dubrDiskIds                      = mempty
    , _dubrUploadBufferUsedInBytes      = Nothing
    , _dubrUploadBufferAllocatedInBytes = Nothing
    }
dubrDiskIds :: Lens' DescribeUploadBufferResponse [Text]
dubrDiskIds = lens _dubrDiskIds (\s a -> s { _dubrDiskIds = a }) . _List
dubrGatewayARN :: Lens' DescribeUploadBufferResponse (Maybe Text)
dubrGatewayARN = lens _dubrGatewayARN (\s a -> s { _dubrGatewayARN = a })
dubrUploadBufferAllocatedInBytes :: Lens' DescribeUploadBufferResponse (Maybe Integer)
dubrUploadBufferAllocatedInBytes =
    lens _dubrUploadBufferAllocatedInBytes
        (\s a -> s { _dubrUploadBufferAllocatedInBytes = a })
dubrUploadBufferUsedInBytes :: Lens' DescribeUploadBufferResponse (Maybe Integer)
dubrUploadBufferUsedInBytes =
    lens _dubrUploadBufferUsedInBytes
        (\s a -> s { _dubrUploadBufferUsedInBytes = a })
instance ToPath DescribeUploadBuffer where
    toPath = const "/"
instance ToQuery DescribeUploadBuffer where
    toQuery = const mempty
instance ToHeaders DescribeUploadBuffer
instance ToJSON DescribeUploadBuffer where
    toJSON DescribeUploadBuffer{..} = object
        [ "GatewayARN" .= _dubGatewayARN
        ]
instance AWSRequest DescribeUploadBuffer where
    type Sv DescribeUploadBuffer = StorageGateway
    type Rs DescribeUploadBuffer = DescribeUploadBufferResponse
    request  = post "DescribeUploadBuffer"
    response = jsonResponse
instance FromJSON DescribeUploadBufferResponse where
    parseJSON = withObject "DescribeUploadBufferResponse" $ \o -> DescribeUploadBufferResponse
        <$> o .:? "DiskIds" .!= mempty
        <*> o .:? "GatewayARN"
        <*> o .:? "UploadBufferAllocatedInBytes"
        <*> o .:? "UploadBufferUsedInBytes"