module Network.AWS.StorageGateway.DescribeWorkingStorage
    (
    
      describeWorkingStorage
    , DescribeWorkingStorage
    
    , dwsGatewayARN
    
    , describeWorkingStorageResponse
    , DescribeWorkingStorageResponse
    
    , dwsrsGatewayARN
    , dwsrsDiskIds
    , dwsrsWorkingStorageAllocatedInBytes
    , dwsrsWorkingStorageUsedInBytes
    , dwsrsStatus
    ) 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 DescribeWorkingStorage = DescribeWorkingStorage'
    { _dwsGatewayARN :: Text
    } deriving (Eq,Read,Show,Data,Typeable,Generic)
describeWorkingStorage
    :: Text 
    -> DescribeWorkingStorage
describeWorkingStorage pGatewayARN_ =
    DescribeWorkingStorage'
    { _dwsGatewayARN = pGatewayARN_
    }
dwsGatewayARN :: Lens' DescribeWorkingStorage Text
dwsGatewayARN = lens _dwsGatewayARN (\ s a -> s{_dwsGatewayARN = a});
instance AWSRequest DescribeWorkingStorage where
        type Rs DescribeWorkingStorage =
             DescribeWorkingStorageResponse
        request = postJSON storageGateway
        response
          = receiveJSON
              (\ s h x ->
                 DescribeWorkingStorageResponse' <$>
                   (x .?> "GatewayARN") <*> (x .?> "DiskIds" .!@ mempty)
                     <*> (x .?> "WorkingStorageAllocatedInBytes")
                     <*> (x .?> "WorkingStorageUsedInBytes")
                     <*> (pure (fromEnum s)))
instance ToHeaders DescribeWorkingStorage where
        toHeaders
          = const
              (mconcat
                 ["X-Amz-Target" =#
                    ("StorageGateway_20130630.DescribeWorkingStorage" ::
                       ByteString),
                  "Content-Type" =#
                    ("application/x-amz-json-1.1" :: ByteString)])
instance ToJSON DescribeWorkingStorage where
        toJSON DescribeWorkingStorage'{..}
          = object
              (catMaybes [Just ("GatewayARN" .= _dwsGatewayARN)])
instance ToPath DescribeWorkingStorage where
        toPath = const "/"
instance ToQuery DescribeWorkingStorage where
        toQuery = const mempty
data DescribeWorkingStorageResponse = DescribeWorkingStorageResponse'
    { _dwsrsGatewayARN                     :: !(Maybe Text)
    , _dwsrsDiskIds                        :: !(Maybe [Text])
    , _dwsrsWorkingStorageAllocatedInBytes :: !(Maybe Integer)
    , _dwsrsWorkingStorageUsedInBytes      :: !(Maybe Integer)
    , _dwsrsStatus                         :: !Int
    } deriving (Eq,Read,Show,Data,Typeable,Generic)
describeWorkingStorageResponse
    :: Int 
    -> DescribeWorkingStorageResponse
describeWorkingStorageResponse pStatus_ =
    DescribeWorkingStorageResponse'
    { _dwsrsGatewayARN = Nothing
    , _dwsrsDiskIds = Nothing
    , _dwsrsWorkingStorageAllocatedInBytes = Nothing
    , _dwsrsWorkingStorageUsedInBytes = Nothing
    , _dwsrsStatus = pStatus_
    }
dwsrsGatewayARN :: Lens' DescribeWorkingStorageResponse (Maybe Text)
dwsrsGatewayARN = lens _dwsrsGatewayARN (\ s a -> s{_dwsrsGatewayARN = a});
dwsrsDiskIds :: Lens' DescribeWorkingStorageResponse [Text]
dwsrsDiskIds = lens _dwsrsDiskIds (\ s a -> s{_dwsrsDiskIds = a}) . _Default . _Coerce;
dwsrsWorkingStorageAllocatedInBytes :: Lens' DescribeWorkingStorageResponse (Maybe Integer)
dwsrsWorkingStorageAllocatedInBytes = lens _dwsrsWorkingStorageAllocatedInBytes (\ s a -> s{_dwsrsWorkingStorageAllocatedInBytes = a});
dwsrsWorkingStorageUsedInBytes :: Lens' DescribeWorkingStorageResponse (Maybe Integer)
dwsrsWorkingStorageUsedInBytes = lens _dwsrsWorkingStorageUsedInBytes (\ s a -> s{_dwsrsWorkingStorageUsedInBytes = a});
dwsrsStatus :: Lens' DescribeWorkingStorageResponse Int
dwsrsStatus = lens _dwsrsStatus (\ s a -> s{_dwsrsStatus = a});