{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric      #-}
{-# LANGUAGE OverloadedStrings  #-}
{-# LANGUAGE RecordWildCards    #-}
{-# LANGUAGE TypeFamilies       #-}

{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Network.AWS.Redshift.DescribeTableRestoreStatus
-- Copyright   : (c) 2013-2016 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Lists the status of one or more table restore requests made using the
-- < RestoreTableFromClusterSnapshot> API action. If you don\'t specify a
-- value for the 'TableRestoreRequestId' parameter, then
-- 'DescribeTableRestoreStatus' returns the status of all table restore
-- requests ordered by the date and time of the request in ascending order.
-- Otherwise 'DescribeTableRestoreStatus' returns the status of the table
-- specified by 'TableRestoreRequestId'.
module Network.AWS.Redshift.DescribeTableRestoreStatus
    (
    -- * Creating a Request
      describeTableRestoreStatus
    , DescribeTableRestoreStatus
    -- * Request Lenses
    , dtrssTableRestoreRequestId
    , dtrssClusterIdentifier
    , dtrssMarker
    , dtrssMaxRecords

    -- * Destructuring the Response
    , describeTableRestoreStatusResponse
    , DescribeTableRestoreStatusResponse
    -- * Response Lenses
    , dtrsrsMarker
    , dtrsrsTableRestoreStatusDetails
    , dtrsrsResponseStatus
    ) where

import           Network.AWS.Lens
import           Network.AWS.Prelude
import           Network.AWS.Redshift.Types
import           Network.AWS.Redshift.Types.Product
import           Network.AWS.Request
import           Network.AWS.Response

-- | /See:/ 'describeTableRestoreStatus' smart constructor.
data DescribeTableRestoreStatus = DescribeTableRestoreStatus'
    { _dtrssTableRestoreRequestId :: !(Maybe Text)
    , _dtrssClusterIdentifier     :: !(Maybe Text)
    , _dtrssMarker                :: !(Maybe Text)
    , _dtrssMaxRecords            :: !(Maybe Int)
    } deriving (Eq,Read,Show,Data,Typeable,Generic)

-- | Creates a value of 'DescribeTableRestoreStatus' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'dtrssTableRestoreRequestId'
--
-- * 'dtrssClusterIdentifier'
--
-- * 'dtrssMarker'
--
-- * 'dtrssMaxRecords'
describeTableRestoreStatus
    :: DescribeTableRestoreStatus
describeTableRestoreStatus =
    DescribeTableRestoreStatus'
    { _dtrssTableRestoreRequestId = Nothing
    , _dtrssClusterIdentifier = Nothing
    , _dtrssMarker = Nothing
    , _dtrssMaxRecords = Nothing
    }

-- | The identifier of the table restore request to return status for. If you
-- don\'t specify a 'TableRestoreRequestId' value, then
-- 'DescribeTableRestoreStatus' returns the status of all in-progress table
-- restore requests.
dtrssTableRestoreRequestId :: Lens' DescribeTableRestoreStatus (Maybe Text)
dtrssTableRestoreRequestId = lens _dtrssTableRestoreRequestId (\ s a -> s{_dtrssTableRestoreRequestId = a});

-- | The Amazon Redshift cluster that the table is being restored to.
dtrssClusterIdentifier :: Lens' DescribeTableRestoreStatus (Maybe Text)
dtrssClusterIdentifier = lens _dtrssClusterIdentifier (\ s a -> s{_dtrssClusterIdentifier = a});

-- | An optional pagination token provided by a previous
-- 'DescribeTableRestoreStatus' request. If this parameter is specified,
-- the response includes only records beyond the marker, up to the value
-- specified by the 'MaxRecords' parameter.
dtrssMarker :: Lens' DescribeTableRestoreStatus (Maybe Text)
dtrssMarker = lens _dtrssMarker (\ s a -> s{_dtrssMarker = a});

-- | The maximum number of records to include in the response. If more
-- records exist than the specified 'MaxRecords' value, a pagination token
-- called a marker is included in the response so that the remaining
-- results can be retrieved.
dtrssMaxRecords :: Lens' DescribeTableRestoreStatus (Maybe Int)
dtrssMaxRecords = lens _dtrssMaxRecords (\ s a -> s{_dtrssMaxRecords = a});

instance AWSRequest DescribeTableRestoreStatus where
        type Rs DescribeTableRestoreStatus =
             DescribeTableRestoreStatusResponse
        request = postQuery redshift
        response
          = receiveXMLWrapper
              "DescribeTableRestoreStatusResult"
              (\ s h x ->
                 DescribeTableRestoreStatusResponse' <$>
                   (x .@? "Marker") <*>
                     (x .@? "TableRestoreStatusDetails" .!@ mempty >>=
                        may (parseXMLList "TableRestoreStatus"))
                     <*> (pure (fromEnum s)))

instance Hashable DescribeTableRestoreStatus

instance NFData DescribeTableRestoreStatus

instance ToHeaders DescribeTableRestoreStatus where
        toHeaders = const mempty

instance ToPath DescribeTableRestoreStatus where
        toPath = const "/"

instance ToQuery DescribeTableRestoreStatus where
        toQuery DescribeTableRestoreStatus'{..}
          = mconcat
              ["Action" =:
                 ("DescribeTableRestoreStatus" :: ByteString),
               "Version" =: ("2012-12-01" :: ByteString),
               "TableRestoreRequestId" =:
                 _dtrssTableRestoreRequestId,
               "ClusterIdentifier" =: _dtrssClusterIdentifier,
               "Marker" =: _dtrssMarker,
               "MaxRecords" =: _dtrssMaxRecords]

-- | /See:/ 'describeTableRestoreStatusResponse' smart constructor.
data DescribeTableRestoreStatusResponse = DescribeTableRestoreStatusResponse'
    { _dtrsrsMarker                    :: !(Maybe Text)
    , _dtrsrsTableRestoreStatusDetails :: !(Maybe [TableRestoreStatus])
    , _dtrsrsResponseStatus            :: !Int
    } deriving (Eq,Read,Show,Data,Typeable,Generic)

-- | Creates a value of 'DescribeTableRestoreStatusResponse' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'dtrsrsMarker'
--
-- * 'dtrsrsTableRestoreStatusDetails'
--
-- * 'dtrsrsResponseStatus'
describeTableRestoreStatusResponse
    :: Int -- ^ 'dtrsrsResponseStatus'
    -> DescribeTableRestoreStatusResponse
describeTableRestoreStatusResponse pResponseStatus_ =
    DescribeTableRestoreStatusResponse'
    { _dtrsrsMarker = Nothing
    , _dtrsrsTableRestoreStatusDetails = Nothing
    , _dtrsrsResponseStatus = pResponseStatus_
    }

-- | A pagination token that can be used in a subsequent
-- < DescribeTableRestoreStatus> request.
dtrsrsMarker :: Lens' DescribeTableRestoreStatusResponse (Maybe Text)
dtrsrsMarker = lens _dtrsrsMarker (\ s a -> s{_dtrsrsMarker = a});

-- | A list of status details for one or more table restore requests.
dtrsrsTableRestoreStatusDetails :: Lens' DescribeTableRestoreStatusResponse [TableRestoreStatus]
dtrsrsTableRestoreStatusDetails = lens _dtrsrsTableRestoreStatusDetails (\ s a -> s{_dtrsrsTableRestoreStatusDetails = a}) . _Default . _Coerce;

-- | The response status code.
dtrsrsResponseStatus :: Lens' DescribeTableRestoreStatusResponse Int
dtrsrsResponseStatus = lens _dtrsrsResponseStatus (\ s a -> s{_dtrsrsResponseStatus = a});

instance NFData DescribeTableRestoreStatusResponse