module Network.AWS.StorageGateway.DescribeTapeRecoveryPoints
    (
    
      describeTapeRecoveryPoints
    , DescribeTapeRecoveryPoints
    
    , dtrpMarker
    , dtrpLimit
    , dtrpGatewayARN
    
    , describeTapeRecoveryPointsResponse
    , DescribeTapeRecoveryPointsResponse
    
    , dtrprsTapeRecoveryPointInfos
    , dtrprsGatewayARN
    , dtrprsMarker
    , dtrprsStatus
    ) where
import           Network.AWS.Pager
import           Network.AWS.Prelude
import           Network.AWS.Request
import           Network.AWS.Response
import           Network.AWS.StorageGateway.Types
import           Network.AWS.StorageGateway.Types.Product
data DescribeTapeRecoveryPoints = DescribeTapeRecoveryPoints'
    { _dtrpMarker     :: !(Maybe Text)
    , _dtrpLimit      :: !(Maybe Nat)
    , _dtrpGatewayARN :: !Text
    } deriving (Eq,Read,Show,Data,Typeable,Generic)
describeTapeRecoveryPoints
    :: Text 
    -> DescribeTapeRecoveryPoints
describeTapeRecoveryPoints pGatewayARN_ =
    DescribeTapeRecoveryPoints'
    { _dtrpMarker = Nothing
    , _dtrpLimit = Nothing
    , _dtrpGatewayARN = pGatewayARN_
    }
dtrpMarker :: Lens' DescribeTapeRecoveryPoints (Maybe Text)
dtrpMarker = lens _dtrpMarker (\ s a -> s{_dtrpMarker = a});
dtrpLimit :: Lens' DescribeTapeRecoveryPoints (Maybe Natural)
dtrpLimit = lens _dtrpLimit (\ s a -> s{_dtrpLimit = a}) . mapping _Nat;
dtrpGatewayARN :: Lens' DescribeTapeRecoveryPoints Text
dtrpGatewayARN = lens _dtrpGatewayARN (\ s a -> s{_dtrpGatewayARN = a});
instance AWSPager DescribeTapeRecoveryPoints where
        page rq rs
          | stop (rs ^. dtrprsMarker) = Nothing
          | stop (rs ^. dtrprsTapeRecoveryPointInfos) = Nothing
          | otherwise =
            Just $ rq & dtrpMarker .~ rs ^. dtrprsMarker
instance AWSRequest DescribeTapeRecoveryPoints where
        type Rs DescribeTapeRecoveryPoints =
             DescribeTapeRecoveryPointsResponse
        request = postJSON storageGateway
        response
          = receiveJSON
              (\ s h x ->
                 DescribeTapeRecoveryPointsResponse' <$>
                   (x .?> "TapeRecoveryPointInfos" .!@ mempty) <*>
                     (x .?> "GatewayARN")
                     <*> (x .?> "Marker")
                     <*> (pure (fromEnum s)))
instance ToHeaders DescribeTapeRecoveryPoints where
        toHeaders
          = const
              (mconcat
                 ["X-Amz-Target" =#
                    ("StorageGateway_20130630.DescribeTapeRecoveryPoints"
                       :: ByteString),
                  "Content-Type" =#
                    ("application/x-amz-json-1.1" :: ByteString)])
instance ToJSON DescribeTapeRecoveryPoints where
        toJSON DescribeTapeRecoveryPoints'{..}
          = object
              (catMaybes
                 [("Marker" .=) <$> _dtrpMarker,
                  ("Limit" .=) <$> _dtrpLimit,
                  Just ("GatewayARN" .= _dtrpGatewayARN)])
instance ToPath DescribeTapeRecoveryPoints where
        toPath = const "/"
instance ToQuery DescribeTapeRecoveryPoints where
        toQuery = const mempty
data DescribeTapeRecoveryPointsResponse = DescribeTapeRecoveryPointsResponse'
    { _dtrprsTapeRecoveryPointInfos :: !(Maybe [TapeRecoveryPointInfo])
    , _dtrprsGatewayARN             :: !(Maybe Text)
    , _dtrprsMarker                 :: !(Maybe Text)
    , _dtrprsStatus                 :: !Int
    } deriving (Eq,Read,Show,Data,Typeable,Generic)
describeTapeRecoveryPointsResponse
    :: Int 
    -> DescribeTapeRecoveryPointsResponse
describeTapeRecoveryPointsResponse pStatus_ =
    DescribeTapeRecoveryPointsResponse'
    { _dtrprsTapeRecoveryPointInfos = Nothing
    , _dtrprsGatewayARN = Nothing
    , _dtrprsMarker = Nothing
    , _dtrprsStatus = pStatus_
    }
dtrprsTapeRecoveryPointInfos :: Lens' DescribeTapeRecoveryPointsResponse [TapeRecoveryPointInfo]
dtrprsTapeRecoveryPointInfos = lens _dtrprsTapeRecoveryPointInfos (\ s a -> s{_dtrprsTapeRecoveryPointInfos = a}) . _Default . _Coerce;
dtrprsGatewayARN :: Lens' DescribeTapeRecoveryPointsResponse (Maybe Text)
dtrprsGatewayARN = lens _dtrprsGatewayARN (\ s a -> s{_dtrprsGatewayARN = a});
dtrprsMarker :: Lens' DescribeTapeRecoveryPointsResponse (Maybe Text)
dtrprsMarker = lens _dtrprsMarker (\ s a -> s{_dtrprsMarker = a});
dtrprsStatus :: Lens' DescribeTapeRecoveryPointsResponse Int
dtrprsStatus = lens _dtrprsStatus (\ s a -> s{_dtrprsStatus = a});