module Network.AWS.StorageGateway.DescribeVTLDevices
    (
    
      DescribeVTLDevices
    
    , describeVTLDevices
    
    , dvtldGatewayARN
    , dvtldLimit
    , dvtldMarker
    , dvtldVTLDeviceARNs
    
    , DescribeVTLDevicesResponse
    
    , describeVTLDevicesResponse
    
    , dvtldrGatewayARN
    , dvtldrMarker
    , dvtldrVTLDevices
    ) where
import Network.AWS.Prelude
import Network.AWS.Request.JSON
import Network.AWS.StorageGateway.Types
import qualified GHC.Exts
data DescribeVTLDevices = DescribeVTLDevices
    { _dvtldGatewayARN    :: Text
    , _dvtldLimit         :: Maybe Nat
    , _dvtldMarker        :: Maybe Text
    , _dvtldVTLDeviceARNs :: List "VTLDeviceARNs" Text
    } deriving (Eq, Ord, Read, Show)
describeVTLDevices :: Text 
                   -> DescribeVTLDevices
describeVTLDevices p1 = DescribeVTLDevices
    { _dvtldGatewayARN    = p1
    , _dvtldVTLDeviceARNs = mempty
    , _dvtldMarker        = Nothing
    , _dvtldLimit         = Nothing
    }
dvtldGatewayARN :: Lens' DescribeVTLDevices Text
dvtldGatewayARN = lens _dvtldGatewayARN (\s a -> s { _dvtldGatewayARN = a })
dvtldLimit :: Lens' DescribeVTLDevices (Maybe Natural)
dvtldLimit = lens _dvtldLimit (\s a -> s { _dvtldLimit = a }) . mapping _Nat
dvtldMarker :: Lens' DescribeVTLDevices (Maybe Text)
dvtldMarker = lens _dvtldMarker (\s a -> s { _dvtldMarker = a })
dvtldVTLDeviceARNs :: Lens' DescribeVTLDevices [Text]
dvtldVTLDeviceARNs =
    lens _dvtldVTLDeviceARNs (\s a -> s { _dvtldVTLDeviceARNs = a })
        . _List
data DescribeVTLDevicesResponse = DescribeVTLDevicesResponse
    { _dvtldrGatewayARN :: Maybe Text
    , _dvtldrMarker     :: Maybe Text
    , _dvtldrVTLDevices :: List "VTLDevices" VTLDevice
    } deriving (Eq, Read, Show)
describeVTLDevicesResponse :: DescribeVTLDevicesResponse
describeVTLDevicesResponse = DescribeVTLDevicesResponse
    { _dvtldrGatewayARN = Nothing
    , _dvtldrVTLDevices = mempty
    , _dvtldrMarker     = Nothing
    }
dvtldrGatewayARN :: Lens' DescribeVTLDevicesResponse (Maybe Text)
dvtldrGatewayARN = lens _dvtldrGatewayARN (\s a -> s { _dvtldrGatewayARN = a })
dvtldrMarker :: Lens' DescribeVTLDevicesResponse (Maybe Text)
dvtldrMarker = lens _dvtldrMarker (\s a -> s { _dvtldrMarker = a })
dvtldrVTLDevices :: Lens' DescribeVTLDevicesResponse [VTLDevice]
dvtldrVTLDevices = lens _dvtldrVTLDevices (\s a -> s { _dvtldrVTLDevices = a }) . _List
instance ToPath DescribeVTLDevices where
    toPath = const "/"
instance ToQuery DescribeVTLDevices where
    toQuery = const mempty
instance ToHeaders DescribeVTLDevices
instance ToJSON DescribeVTLDevices where
    toJSON DescribeVTLDevices{..} = object
        [ "GatewayARN"    .= _dvtldGatewayARN
        , "VTLDeviceARNs" .= _dvtldVTLDeviceARNs
        , "Marker"        .= _dvtldMarker
        , "Limit"         .= _dvtldLimit
        ]
instance AWSRequest DescribeVTLDevices where
    type Sv DescribeVTLDevices = StorageGateway
    type Rs DescribeVTLDevices = DescribeVTLDevicesResponse
    request  = post "DescribeVTLDevices"
    response = jsonResponse
instance FromJSON DescribeVTLDevicesResponse where
    parseJSON = withObject "DescribeVTLDevicesResponse" $ \o -> DescribeVTLDevicesResponse
        <$> o .:? "GatewayARN"
        <*> o .:? "Marker"
        <*> o .:? "VTLDevices" .!= mempty
instance AWSPager DescribeVTLDevices where
    page rq rs
        | stop (rs ^. dvtldrMarker) = Nothing
        | otherwise = (\x -> rq & dvtldMarker ?~ x)
            <$> (rs ^. dvtldrMarker)