aws-dynamodb-streams-0.1.0.0: src/Aws/DynamoDb/Streams/Commands/DescribeStream.hs
-- Copyright (c) 2013-2014 PivotCloud, Inc.
--
-- Aws.DynamoDb.Streams.Commands.DescribeStream
--
-- 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.DescribeStream
( -- * Request
DescribeStream(..)
, describeStream
-- ** Lenses
, dstExclusiveStartShardId
, dstLimit
, dstStreamId
-- * Response
, DescribeStreamResponse(..)
-- ** Lenses
, 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)
-- ^ The shard id of the first item this operation will evalute; see also
-- '_sdLastEvaluatedShardId'.
, _dstLimit ∷ !(Maybe Int)
-- ^ The maximum number of shard objects to return.
, _dstStreamId ∷ !StreamId
-- ^ The unique ID of the stream to be described.
} deriving (Eq, Ord, Show, Read, Typeable)
-- | A basic 'DescribeStream' request for a given stream id.
--
-- @
-- myRequest =
-- 'describeStream' myStream
-- & 'dstLimit' ?~ 3
-- @
--
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"
-- | A lens for '_dstExclusiveStartShardId'.
--
-- @
-- 'dstExclusiveStartShardId' ∷ Lens' 'DescribeStream' ('Maybe' 'ShardId')
-- @
--
dstExclusiveStartShardId
∷ Functor f
⇒ (Maybe ShardId → f (Maybe ShardId))
→ DescribeStream
→ f DescribeStream
dstExclusiveStartShardId i DescribeStream{..} =
(\_dstExclusiveStartShardId → DescribeStream{..})
<$> i _dstExclusiveStartShardId
{-# INLINE dstExclusiveStartShardId #-}
-- | A lens for '_dstLimit'.
--
-- @
-- 'dstLimit' ∷ Lens' 'DescribeStream' ('Maybe' 'Int')
-- @
--
dstLimit
∷ Functor f
⇒ (Maybe Int → f (Maybe Int))
→ DescribeStream
→ f DescribeStream
dstLimit i DescribeStream{..} =
(\_dstLimit → DescribeStream{..})
<$> i _dstLimit
{-# INLINE dstLimit #-}
-- | A lens for '_dstStreamId'.
--
-- @
-- 'dstStreamId' ∷ Lens' 'DescribeStream' 'StreamId'
-- @
--
dstStreamId
∷ Functor f
⇒ (StreamId → f StreamId)
→ DescribeStream
→ f DescribeStream
dstStreamId i DescribeStream{..} =
(\_dstStreamId → DescribeStream{..})
<$> i _dstStreamId
{-# INLINE 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"
-- | A lens for '_dstrStreamDescription'.
--
-- @
-- 'dstrStreamDescription' ∷ Lens' 'DescribeStreamResponse' 'StreamDescription'
-- @
--
dstrStreamDescription
∷ Functor f
⇒ (StreamDescription → f StreamDescription)
→ DescribeStreamResponse
→ f DescribeStreamResponse
dstrStreamDescription i DescribeStreamResponse{..} =
(\_dstrStreamDescription → DescribeStreamResponse{..})
<$> i _dstrStreamDescription
{-# INLINE 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
}