module Aws.DynamoDb.Streams.Commands.DescribeStream
(
DescribeStream(..)
, describeStream
, dstExclusiveStartShardId
, dstLimit
, dstStreamId
, DescribeStreamResponse(..)
, dstrStreamDescription
) 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
import Prelude.Unicode
data DescribeStream
= DescribeStream
{ _dstExclusiveStartShardId ∷ !(Maybe ShardId)
, _dstLimit ∷ !(Maybe Int)
, _dstStreamId ∷ !StreamId
} deriving (Eq, Ord, Show, Read, Typeable)
describeStream
∷ StreamId
→ DescribeStream
describeStream streamId = DescribeStream
{ _dstExclusiveStartShardId = Nothing
, _dstLimit = Nothing
, _dstStreamId = streamId
}
instance ToJSON DescribeStream where
toJSON DescribeStream{..} = object
[ "ExclusiveStartShardId" .= _dstExclusiveStartShardId
, "Limit" .= _dstLimit
, "StreamId".= _dstStreamId
]
instance FromJSON DescribeStream where
parseJSON =
withObject "DescribeStream" $ \o →
pure DescribeStream
⊛ o .:? "ExclusiveStartShardId"
⊛ o .:? "Limit"
⊛ o .: "StreamId"
dstExclusiveStartShardId
∷ Functor f
⇒ (Maybe ShardId → f (Maybe ShardId))
→ DescribeStream
→ f DescribeStream
dstExclusiveStartShardId i DescribeStream{..} =
(\_dstExclusiveStartShardId → DescribeStream{..})
<$> i _dstExclusiveStartShardId
dstLimit
∷ Functor f
⇒ (Maybe Int → f (Maybe Int))
→ DescribeStream
→ f DescribeStream
dstLimit i DescribeStream{..} =
(\_dstLimit → DescribeStream{..})
<$> i _dstLimit
dstStreamId
∷ Functor f
⇒ (StreamId → f StreamId)
→ DescribeStream
→ f DescribeStream
dstStreamId i DescribeStream{..} =
(\_dstStreamId → DescribeStream{..})
<$> i _dstStreamId
data DescribeStreamResponse
= DescribeStreamResponse
{ _dstrStreamDescription ∷ !StreamDescription
} deriving (Eq, Ord, Show, Read, Typeable)
instance ToJSON DescribeStreamResponse where
toJSON DescribeStreamResponse{..} = object
[ "StreamDescription" .= _dstrStreamDescription
]
instance FromJSON DescribeStreamResponse where
parseJSON =
withObject "DescribeStreamResponse" $ \o →
DescribeStreamResponse
<$> o .: "StreamDescription"
dstrStreamDescription
∷ Functor f
⇒ (StreamDescription → f StreamDescription)
→ DescribeStreamResponse
→ f DescribeStreamResponse
dstrStreamDescription i DescribeStreamResponse{..} =
(\_dstrStreamDescription → DescribeStreamResponse{..})
<$> i _dstrStreamDescription
instance ResponseConsumer r DescribeStreamResponse where
type ResponseMetadata DescribeStreamResponse = StreamsMetadata
responseConsumer _ = streamsResponseConsumer
instance SignQuery DescribeStream where
type ServiceConfiguration DescribeStream = StreamsConfiguration
signQuery cmd = streamsSignQuery StreamsQuery
{ _stqAction = ActionDescribeStream
, _stqBody = encode cmd
}
instance Transaction DescribeStream DescribeStreamResponse
instance AsMemoryResponse DescribeStreamResponse where
type MemoryResponse DescribeStreamResponse = DescribeStreamResponse
loadToMemory = return
instance ListResponse DescribeStreamResponse Shard where
listResponse = _sdShards ∘ _dstrStreamDescription
instance IteratedTransaction DescribeStream DescribeStreamResponse where
nextIteratedRequest req@DescribeStream{..} DescribeStreamResponse{..} = do
let StreamDescription{..} = _dstrStreamDescription
lastEvaluatedShardId ← _sdLastEvaluatedShardId
return req
{ _dstExclusiveStartShardId = Just lastEvaluatedShardId
}