{-# 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