module Network.AWS.StorageGateway.DescribeTapeRecoveryPoints
    (
    
      DescribeTapeRecoveryPoints
    
    , describeTapeRecoveryPoints
    
    , dtrpGatewayARN
    , dtrpLimit
    , dtrpMarker
    
    , DescribeTapeRecoveryPointsResponse
    
    , describeTapeRecoveryPointsResponse
    
    , dtrprGatewayARN
    , dtrprMarker
    , dtrprTapeRecoveryPointInfos
    ) where
import Network.AWS.Prelude
import Network.AWS.Request.JSON
import Network.AWS.StorageGateway.Types
import qualified GHC.Exts
data DescribeTapeRecoveryPoints = DescribeTapeRecoveryPoints
    { _dtrpGatewayARN :: Text
    , _dtrpLimit      :: Maybe Nat
    , _dtrpMarker     :: Maybe Text
    } deriving (Eq, Ord, Read, Show)
describeTapeRecoveryPoints :: Text 
                           -> DescribeTapeRecoveryPoints
describeTapeRecoveryPoints p1 = DescribeTapeRecoveryPoints
    { _dtrpGatewayARN = p1
    , _dtrpMarker     = Nothing
    , _dtrpLimit      = Nothing
    }
dtrpGatewayARN :: Lens' DescribeTapeRecoveryPoints Text
dtrpGatewayARN = lens _dtrpGatewayARN (\s a -> s { _dtrpGatewayARN = a })
dtrpLimit :: Lens' DescribeTapeRecoveryPoints (Maybe Natural)
dtrpLimit = lens _dtrpLimit (\s a -> s { _dtrpLimit = a }) . mapping _Nat
dtrpMarker :: Lens' DescribeTapeRecoveryPoints (Maybe Text)
dtrpMarker = lens _dtrpMarker (\s a -> s { _dtrpMarker = a })
data DescribeTapeRecoveryPointsResponse = DescribeTapeRecoveryPointsResponse
    { _dtrprGatewayARN             :: Maybe Text
    , _dtrprMarker                 :: Maybe Text
    , _dtrprTapeRecoveryPointInfos :: List "TapeRecoveryPointInfos" TapeRecoveryPointInfo
    } deriving (Eq, Read, Show)
describeTapeRecoveryPointsResponse :: DescribeTapeRecoveryPointsResponse
describeTapeRecoveryPointsResponse = DescribeTapeRecoveryPointsResponse
    { _dtrprGatewayARN             = Nothing
    , _dtrprTapeRecoveryPointInfos = mempty
    , _dtrprMarker                 = Nothing
    }
dtrprGatewayARN :: Lens' DescribeTapeRecoveryPointsResponse (Maybe Text)
dtrprGatewayARN = lens _dtrprGatewayARN (\s a -> s { _dtrprGatewayARN = a })
dtrprMarker :: Lens' DescribeTapeRecoveryPointsResponse (Maybe Text)
dtrprMarker = lens _dtrprMarker (\s a -> s { _dtrprMarker = a })
dtrprTapeRecoveryPointInfos :: Lens' DescribeTapeRecoveryPointsResponse [TapeRecoveryPointInfo]
dtrprTapeRecoveryPointInfos =
    lens _dtrprTapeRecoveryPointInfos
        (\s a -> s { _dtrprTapeRecoveryPointInfos = a })
            . _List
instance ToPath DescribeTapeRecoveryPoints where
    toPath = const "/"
instance ToQuery DescribeTapeRecoveryPoints where
    toQuery = const mempty
instance ToHeaders DescribeTapeRecoveryPoints
instance ToJSON DescribeTapeRecoveryPoints where
    toJSON DescribeTapeRecoveryPoints{..} = object
        [ "GatewayARN" .= _dtrpGatewayARN
        , "Marker"     .= _dtrpMarker
        , "Limit"      .= _dtrpLimit
        ]
instance AWSRequest DescribeTapeRecoveryPoints where
    type Sv DescribeTapeRecoveryPoints = StorageGateway
    type Rs DescribeTapeRecoveryPoints = DescribeTapeRecoveryPointsResponse
    request  = post "DescribeTapeRecoveryPoints"
    response = jsonResponse
instance FromJSON DescribeTapeRecoveryPointsResponse where
    parseJSON = withObject "DescribeTapeRecoveryPointsResponse" $ \o -> DescribeTapeRecoveryPointsResponse
        <$> o .:? "GatewayARN"
        <*> o .:? "Marker"
        <*> o .:? "TapeRecoveryPointInfos" .!= mempty
instance AWSPager DescribeTapeRecoveryPoints where
    page rq rs
        | stop (rs ^. dtrprMarker) = Nothing
        | otherwise = (\x -> rq & dtrpMarker ?~ x)
            <$> (rs ^. dtrprMarker)