module Network.AWS.StorageGateway.DescribeWorkingStorage
    (
    
      DescribeWorkingStorage
    
    , describeWorkingStorage
    
    , dwsGatewayARN
    
    , DescribeWorkingStorageResponse
    
    , describeWorkingStorageResponse
    
    , dwsrDiskIds
    , dwsrGatewayARN
    , dwsrWorkingStorageAllocatedInBytes
    , dwsrWorkingStorageUsedInBytes
    ) where
import Network.AWS.Prelude
import Network.AWS.Request.JSON
import Network.AWS.StorageGateway.Types
import qualified GHC.Exts
newtype DescribeWorkingStorage = DescribeWorkingStorage
    { _dwsGatewayARN :: Text
    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
describeWorkingStorage :: Text 
                       -> DescribeWorkingStorage
describeWorkingStorage p1 = DescribeWorkingStorage
    { _dwsGatewayARN = p1
    }
dwsGatewayARN :: Lens' DescribeWorkingStorage Text
dwsGatewayARN = lens _dwsGatewayARN (\s a -> s { _dwsGatewayARN = a })
data DescribeWorkingStorageResponse = DescribeWorkingStorageResponse
    { _dwsrDiskIds                        :: List "DiskIds" Text
    , _dwsrGatewayARN                     :: Maybe Text
    , _dwsrWorkingStorageAllocatedInBytes :: Maybe Integer
    , _dwsrWorkingStorageUsedInBytes      :: Maybe Integer
    } deriving (Eq, Ord, Read, Show)
describeWorkingStorageResponse :: DescribeWorkingStorageResponse
describeWorkingStorageResponse = DescribeWorkingStorageResponse
    { _dwsrGatewayARN                     = Nothing
    , _dwsrDiskIds                        = mempty
    , _dwsrWorkingStorageUsedInBytes      = Nothing
    , _dwsrWorkingStorageAllocatedInBytes = Nothing
    }
dwsrDiskIds :: Lens' DescribeWorkingStorageResponse [Text]
dwsrDiskIds = lens _dwsrDiskIds (\s a -> s { _dwsrDiskIds = a }) . _List
dwsrGatewayARN :: Lens' DescribeWorkingStorageResponse (Maybe Text)
dwsrGatewayARN = lens _dwsrGatewayARN (\s a -> s { _dwsrGatewayARN = a })
dwsrWorkingStorageAllocatedInBytes :: Lens' DescribeWorkingStorageResponse (Maybe Integer)
dwsrWorkingStorageAllocatedInBytes =
    lens _dwsrWorkingStorageAllocatedInBytes
        (\s a -> s { _dwsrWorkingStorageAllocatedInBytes = a })
dwsrWorkingStorageUsedInBytes :: Lens' DescribeWorkingStorageResponse (Maybe Integer)
dwsrWorkingStorageUsedInBytes =
    lens _dwsrWorkingStorageUsedInBytes
        (\s a -> s { _dwsrWorkingStorageUsedInBytes = a })
instance ToPath DescribeWorkingStorage where
    toPath = const "/"
instance ToQuery DescribeWorkingStorage where
    toQuery = const mempty
instance ToHeaders DescribeWorkingStorage
instance ToJSON DescribeWorkingStorage where
    toJSON DescribeWorkingStorage{..} = object
        [ "GatewayARN" .= _dwsGatewayARN
        ]
instance AWSRequest DescribeWorkingStorage where
    type Sv DescribeWorkingStorage = StorageGateway
    type Rs DescribeWorkingStorage = DescribeWorkingStorageResponse
    request  = post "DescribeWorkingStorage"
    response = jsonResponse
instance FromJSON DescribeWorkingStorageResponse where
    parseJSON = withObject "DescribeWorkingStorageResponse" $ \o -> DescribeWorkingStorageResponse
        <$> o .:? "DiskIds" .!= mempty
        <*> o .:? "GatewayARN"
        <*> o .:? "WorkingStorageAllocatedInBytes"
        <*> o .:? "WorkingStorageUsedInBytes"