module Aws.DynamoDb.Streams.Commands.ListStreams
(
ListStreams(..)
, listStreams
, lstExclusiveStartStreamId
, lstLimit
, lstTableName
, ListStreamsResponse(..)
, lstrLastEvalutedStreamId
, lstrStreamIds
) where
import Aws.Core
import Aws.DynamoDb.Streams.Core
import Aws.DynamoDb.Streams.Types
import Control.Applicative
import Control.Applicative.Unicode
import Data.Aeson
import Data.Monoid
import Data.Typeable
import qualified Data.Text as T
data ListStreams
= ListStreams
{ _lstExclusiveStartStreamId ∷ !(Maybe StreamId)
, _lstLimit ∷ !(Maybe Int)
, _lstTableName ∷ !(Maybe T.Text)
} deriving (Eq, Ord, Show, Read, Typeable)
instance ToJSON ListStreams where
toJSON ListStreams{..} = object
[ "ExclusiveStartStreamId" .= _lstExclusiveStartStreamId
, "Limit" .= _lstLimit
, "TableName" .= _lstTableName
]
instance FromJSON ListStreams where
parseJSON =
withObject "ListStreams" $ \o →
pure ListStreams
⊛ o .:? "ExclusiveStartStreamId"
⊛ o .:? "Limit"
⊛ o .:? "TableName"
instance Monoid ListStreams where
mempty = listStreams
ls `mappend` ls' = ListStreams
{ _lstExclusiveStartStreamId = _lstExclusiveStartStreamId ls <|> _lstExclusiveStartStreamId ls'
, _lstLimit = _lstLimit ls <|> _lstLimit ls'
, _lstTableName = _lstTableName ls <|> _lstTableName ls'
}
listStreams ∷ ListStreams
listStreams = ListStreams
{ _lstExclusiveStartStreamId = Nothing
, _lstLimit = Nothing
, _lstTableName = Nothing
}
lstExclusiveStartStreamId
∷ Functor f
⇒ (Maybe StreamId → f (Maybe StreamId))
→ ListStreams
→ f ListStreams
lstExclusiveStartStreamId i ListStreams{..} =
(\_lstExclusiveStartStreamId → ListStreams{..})
<$> i _lstExclusiveStartStreamId
lstLimit
∷ Functor f
⇒ (Maybe Int → f (Maybe Int))
→ ListStreams
→ f ListStreams
lstLimit i ListStreams{..} =
(\_lstLimit → ListStreams{..})
<$> i _lstLimit
lstTableName
∷ Functor f
⇒ (Maybe T.Text → f (Maybe T.Text))
→ ListStreams
→ f ListStreams
lstTableName i ListStreams{..} =
(\_lstTableName → ListStreams{..})
<$> i _lstTableName
data ListStreamsResponse
= ListStreamsResponse
{ _lstrLastEvalutedStreamId ∷ !(Maybe StreamId)
, _lstrStreamIds ∷ ![StreamId]
} deriving (Eq, Ord, Read, Show, Typeable)
instance ToJSON ListStreamsResponse where
toJSON ListStreamsResponse{..} = object
[ "LastEvaluatedStreamId" .= _lstrLastEvalutedStreamId
, "StreamIds" .= _lstrStreamIds
]
instance FromJSON ListStreamsResponse where
parseJSON =
withObject "ListStreamsResponse" $ \o →
pure ListStreamsResponse
⊛ o .:? "LastEvaluatedStreamId"
⊛ o .:? "StreamIds" .!= []
lstrLastEvalutedStreamId
∷ Functor f
⇒ (Maybe StreamId → f (Maybe StreamId))
→ ListStreamsResponse
→ f ListStreamsResponse
lstrLastEvalutedStreamId i ListStreamsResponse{..} =
(\_lstrLastEvalutedStreamId → ListStreamsResponse{..})
<$> i _lstrLastEvalutedStreamId
lstrStreamIds
∷ Functor f
⇒ ([StreamId] → f [StreamId])
→ ListStreamsResponse
→ f ListStreamsResponse
lstrStreamIds i ListStreamsResponse{..} =
(\_lstrStreamIds → ListStreamsResponse{..})
<$> i _lstrStreamIds
instance ResponseConsumer r ListStreamsResponse where
type ResponseMetadata ListStreamsResponse = StreamsMetadata
responseConsumer _ = streamsResponseConsumer
instance SignQuery ListStreams where
type ServiceConfiguration ListStreams = StreamsConfiguration
signQuery cmd = streamsSignQuery StreamsQuery
{ _stqAction = ActionListStreams
, _stqBody = encode cmd
}
instance Transaction ListStreams ListStreamsResponse
instance AsMemoryResponse ListStreamsResponse where
type MemoryResponse ListStreamsResponse = ListStreamsResponse
loadToMemory = return
instance ListResponse ListStreamsResponse StreamId where
listResponse = _lstrStreamIds
instance IteratedTransaction ListStreams ListStreamsResponse where
nextIteratedRequest req@ListStreams{..} ListStreamsResponse{..} = do
lastEvaluatedStreamId ← _lstrLastEvalutedStreamId
return req
{ _lstExclusiveStartStreamId = Just lastEvaluatedStreamId
}