aws-dynamodb-streams-0.1.0.0: src/Aws/DynamoDb/Streams/Commands/GetRecords.hs
-- Copyright (c) 2013-2014 PivotCloud, Inc.
--
-- Aws.DynamoDb.Streams.Commands.GetRecords
--
-- Please feel free to contact us at licensing@pivotmail.com with any
-- contributions, additions, or other feedback; we would love to hear from
-- you.
--
-- Licensed under the Apache License, Version 2.0 (the "License"); you may
-- not use this file except in compliance with the License. You may obtain a
-- copy of the License at http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-- WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-- License for the specific language governing permissions and limitations
-- under the License.
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UnicodeSyntax #-}
-- |
-- Copyright: Copyright (c) 2013-2014 PivotCloud, Inc.
-- License: Apache-2.0
--
module Aws.DynamoDb.Streams.Commands.GetRecords
( -- * Request
GetRecords(..)
, getRecords
-- ** Lenses
, grShardIterator
, grLimit
-- * Response
, GetRecordsResponse(..)
-- ** Lenses
, grrRecords
, grrNextShardIterator
) 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.Typeable
data GetRecords
= GetRecords
{ _grShardIterator ∷ !ShardIterator
, _grLimit ∷ !(Maybe Int)
} deriving (Eq, Ord, Show, Read, Typeable)
-- | A basic 'GetRecords' request for a given shard iterator.
--
-- @
-- myRequest = getRecords it & grLimit ?~ 42
-- @
--
getRecords
∷ ShardIterator
→ GetRecords
getRecords it = GetRecords
{ _grShardIterator = it
, _grLimit = Nothing
}
instance ToJSON GetRecords where
toJSON GetRecords{..} = object
[ "ShardIterator" .= _grShardIterator
, "Limit" .= _grLimit
]
instance FromJSON GetRecords where
parseJSON =
withObject "GetRecords" $ \o →
pure GetRecords
⊛ o .: "ShardIterator"
⊛ o .:? "Limit"
-- | A lens for '_grShardIterator'.
--
-- @
-- grShardIterator ∷ Lens' 'GetRecords' 'ShardIterator'
-- @
--
grShardIterator
∷ Functor f
⇒ (ShardIterator → f ShardIterator)
→ GetRecords
→ f GetRecords
grShardIterator i GetRecords{..} =
(\_grShardIterator → GetRecords{..})
<$> i _grShardIterator
{-# INLINE grShardIterator #-}
-- | A lens for '_grLimit'.
--
-- @
-- grLimit ∷ Lens' 'GetRecords' ('Maybe' 'Int')
-- @
--
grLimit
∷ Functor f
⇒ (Maybe Int → f (Maybe Int))
→ GetRecords
→ f GetRecords
grLimit i GetRecords{..} =
(\_grLimit → GetRecords{..})
<$> i _grLimit
{-# INLINE grLimit #-}
data GetRecordsResponse
= GetRecordsResponse
{ _grrNextShardIterator ∷ !(Maybe ShardIterator)
, _grrRecords ∷ ![Record]
} deriving (Eq, Ord, Show, Read, Typeable)
instance ToJSON GetRecordsResponse where
toJSON GetRecordsResponse{..} = object
[ "NextShardIterator" .= _grrNextShardIterator
, "Records" .= _grrRecords
]
instance FromJSON GetRecordsResponse where
parseJSON =
withObject "GetRecordsResponse" $ \o →
pure GetRecordsResponse
⊛ o .:? "NextShardIterator"
⊛ o .: "Records"
-- | A lens for '_grrRecords'.
--
-- @
-- grrRecords ∷ Lens' 'GetRecordsResponse' ['Record']
-- @
--
grrRecords
∷ Functor f
⇒ ([Record] → f [Record])
→ GetRecordsResponse
→ f GetRecordsResponse
grrRecords i GetRecordsResponse{..} =
(\_grrRecords → GetRecordsResponse{..})
<$> i _grrRecords
{-# INLINE grrRecords #-}
-- | A lens for '_grrNextShardIterator'.
--
-- @
-- grrNextShardIterator ∷ Lens' 'GetRecordsResponse' ('Maybe' 'ShardIterator')
-- @
--
grrNextShardIterator
∷ Functor f
⇒ (Maybe ShardIterator → f (Maybe ShardIterator))
→ GetRecordsResponse
→ f GetRecordsResponse
grrNextShardIterator i GetRecordsResponse{..} =
(\_grrNextShardIterator → GetRecordsResponse{..})
<$> i _grrNextShardIterator
{-# INLINE grrNextShardIterator #-}
instance ResponseConsumer r GetRecordsResponse where
type ResponseMetadata GetRecordsResponse = StreamsMetadata
responseConsumer _ = streamsResponseConsumer
instance SignQuery GetRecords where
type ServiceConfiguration GetRecords = StreamsConfiguration
signQuery cmd = streamsSignQuery StreamsQuery
{ _stqAction = ActionGetRecords
, _stqBody = encode cmd
}
instance Transaction GetRecords GetRecordsResponse
instance AsMemoryResponse GetRecordsResponse where
type MemoryResponse GetRecordsResponse = GetRecordsResponse
loadToMemory = return
instance ListResponse GetRecordsResponse Record where
listResponse = _grrRecords
instance IteratedTransaction GetRecords GetRecordsResponse where
nextIteratedRequest req@GetRecords{..} GetRecordsResponse{..} = do
nextShardIterator ← _grrNextShardIterator
return req
{ _grShardIterator = nextShardIterator
}