packages feed

aws 0.16 → 0.17

raw patch · 10 files changed

+341/−19 lines, 10 filesdep ~basedep ~http-clientdep ~timePVP ok

version bump matches the API change (PVP)

Dependency ranges changed: base, http-client, time, xml-conduit

API changes (from Hackage documentation)

+ Aws: [proxy] :: Configuration -> Maybe Proxy
+ Aws.Aws: [proxy] :: Configuration -> Maybe Proxy
+ Aws.DynamoDb.Commands.BatchGetItem: BatchGetItem :: [(Text, GetRequestItem)] -> ReturnConsumption -> BatchGetItem
+ Aws.DynamoDb.Commands.BatchGetItem: BatchGetItemResponse :: [(Text, [Item])] -> Maybe [(Text, GetRequestItem)] -> Maybe ConsumedCapacity -> BatchGetItemResponse
+ Aws.DynamoDb.Commands.BatchGetItem: GetRequestItem :: Maybe Text -> Bool -> [PrimaryKey] -> GetRequestItem
+ Aws.DynamoDb.Commands.BatchGetItem: [bgConsumed] :: BatchGetItemResponse -> Maybe ConsumedCapacity
+ Aws.DynamoDb.Commands.BatchGetItem: [bgRequests] :: BatchGetItem -> [(Text, GetRequestItem)]
+ Aws.DynamoDb.Commands.BatchGetItem: [bgResponses] :: BatchGetItemResponse -> [(Text, [Item])]
+ Aws.DynamoDb.Commands.BatchGetItem: [bgRetCons] :: BatchGetItem -> ReturnConsumption
+ Aws.DynamoDb.Commands.BatchGetItem: [bgUnprocessed] :: BatchGetItemResponse -> Maybe [(Text, GetRequestItem)]
+ Aws.DynamoDb.Commands.BatchGetItem: [griConsistent] :: GetRequestItem -> Bool
+ Aws.DynamoDb.Commands.BatchGetItem: [griKeys] :: GetRequestItem -> [PrimaryKey]
+ Aws.DynamoDb.Commands.BatchGetItem: [griProjExpr] :: GetRequestItem -> Maybe Text
+ Aws.DynamoDb.Commands.BatchGetItem: batchGetItem :: [(Text, GetRequestItem)] -> BatchGetItem
+ Aws.DynamoDb.Commands.BatchGetItem: batchGetRequestItem :: Maybe Text -> Bool -> [PrimaryKey] -> GetRequestItem
+ Aws.DynamoDb.Commands.BatchGetItem: data BatchGetItem
+ Aws.DynamoDb.Commands.BatchGetItem: data BatchGetItemResponse
+ Aws.DynamoDb.Commands.BatchGetItem: data GetRequestItem
+ Aws.DynamoDb.Commands.BatchGetItem: instance Aws.Core.AsMemoryResponse Aws.DynamoDb.Commands.BatchGetItem.BatchGetItemResponse
+ Aws.DynamoDb.Commands.BatchGetItem: instance Aws.Core.ResponseConsumer r Aws.DynamoDb.Commands.BatchGetItem.BatchGetItemResponse
+ Aws.DynamoDb.Commands.BatchGetItem: instance Aws.Core.SignQuery Aws.DynamoDb.Commands.BatchGetItem.BatchGetItem
+ Aws.DynamoDb.Commands.BatchGetItem: instance Aws.Core.Transaction Aws.DynamoDb.Commands.BatchGetItem.BatchGetItem Aws.DynamoDb.Commands.BatchGetItem.BatchGetItemResponse
+ Aws.DynamoDb.Commands.BatchGetItem: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Commands.BatchGetItem.BatchGetItemResponse
+ Aws.DynamoDb.Commands.BatchGetItem: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Commands.BatchGetItem.GetRequestItem
+ Aws.DynamoDb.Commands.BatchGetItem: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Commands.BatchGetItem.BatchGetItem
+ Aws.DynamoDb.Commands.BatchGetItem: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Commands.BatchGetItem.GetRequestItem
+ Aws.DynamoDb.Commands.BatchGetItem: instance GHC.Classes.Eq Aws.DynamoDb.Commands.BatchGetItem.BatchGetItem
+ Aws.DynamoDb.Commands.BatchGetItem: instance GHC.Classes.Eq Aws.DynamoDb.Commands.BatchGetItem.BatchGetItemResponse
+ Aws.DynamoDb.Commands.BatchGetItem: instance GHC.Classes.Eq Aws.DynamoDb.Commands.BatchGetItem.GetRequestItem
+ Aws.DynamoDb.Commands.BatchGetItem: instance GHC.Classes.Ord Aws.DynamoDb.Commands.BatchGetItem.BatchGetItem
+ Aws.DynamoDb.Commands.BatchGetItem: instance GHC.Classes.Ord Aws.DynamoDb.Commands.BatchGetItem.BatchGetItemResponse
+ Aws.DynamoDb.Commands.BatchGetItem: instance GHC.Classes.Ord Aws.DynamoDb.Commands.BatchGetItem.GetRequestItem
+ Aws.DynamoDb.Commands.BatchGetItem: instance GHC.Read.Read Aws.DynamoDb.Commands.BatchGetItem.BatchGetItem
+ Aws.DynamoDb.Commands.BatchGetItem: instance GHC.Read.Read Aws.DynamoDb.Commands.BatchGetItem.BatchGetItemResponse
+ Aws.DynamoDb.Commands.BatchGetItem: instance GHC.Read.Read Aws.DynamoDb.Commands.BatchGetItem.GetRequestItem
+ Aws.DynamoDb.Commands.BatchGetItem: instance GHC.Show.Show Aws.DynamoDb.Commands.BatchGetItem.BatchGetItem
+ Aws.DynamoDb.Commands.BatchGetItem: instance GHC.Show.Show Aws.DynamoDb.Commands.BatchGetItem.BatchGetItemResponse
+ Aws.DynamoDb.Commands.BatchGetItem: instance GHC.Show.Show Aws.DynamoDb.Commands.BatchGetItem.GetRequestItem
+ Aws.DynamoDb.Commands.BatchGetItem: toBatchGet :: [GetItem] -> BatchGetItem
+ Aws.DynamoDb.Commands.BatchWriteItem: BatchWriteItem :: [(Text, [Request])] -> ReturnConsumption -> ReturnItemCollectionMetrics -> BatchWriteItem
+ Aws.DynamoDb.Commands.BatchWriteItem: BatchWriteItemResponse :: [(Text, [Request])] -> Maybe ConsumedCapacity -> Maybe ItemCollectionMetrics -> BatchWriteItemResponse
+ Aws.DynamoDb.Commands.BatchWriteItem: DeleteRequest :: PrimaryKey -> Request
+ Aws.DynamoDb.Commands.BatchWriteItem: PutRequest :: Item -> Request
+ Aws.DynamoDb.Commands.BatchWriteItem: [bwColMet] :: BatchWriteItemResponse -> Maybe ItemCollectionMetrics
+ Aws.DynamoDb.Commands.BatchWriteItem: [bwConsumed] :: BatchWriteItemResponse -> Maybe ConsumedCapacity
+ Aws.DynamoDb.Commands.BatchWriteItem: [bwRequests] :: BatchWriteItem -> [(Text, [Request])]
+ Aws.DynamoDb.Commands.BatchWriteItem: [bwRetCons] :: BatchWriteItem -> ReturnConsumption
+ Aws.DynamoDb.Commands.BatchWriteItem: [bwRetMet] :: BatchWriteItem -> ReturnItemCollectionMetrics
+ Aws.DynamoDb.Commands.BatchWriteItem: [bwUnprocessed] :: BatchWriteItemResponse -> [(Text, [Request])]
+ Aws.DynamoDb.Commands.BatchWriteItem: [drKey] :: Request -> PrimaryKey
+ Aws.DynamoDb.Commands.BatchWriteItem: [prItem] :: Request -> Item
+ Aws.DynamoDb.Commands.BatchWriteItem: batchWriteItem :: [(Text, [Request])] -> BatchWriteItem
+ Aws.DynamoDb.Commands.BatchWriteItem: data BatchWriteItem
+ Aws.DynamoDb.Commands.BatchWriteItem: data BatchWriteItemResponse
+ Aws.DynamoDb.Commands.BatchWriteItem: data Request
+ Aws.DynamoDb.Commands.BatchWriteItem: instance Aws.Core.AsMemoryResponse Aws.DynamoDb.Commands.BatchWriteItem.BatchWriteItemResponse
+ Aws.DynamoDb.Commands.BatchWriteItem: instance Aws.Core.ResponseConsumer r Aws.DynamoDb.Commands.BatchWriteItem.BatchWriteItemResponse
+ Aws.DynamoDb.Commands.BatchWriteItem: instance Aws.Core.SignQuery Aws.DynamoDb.Commands.BatchWriteItem.BatchWriteItem
+ Aws.DynamoDb.Commands.BatchWriteItem: instance Aws.Core.Transaction Aws.DynamoDb.Commands.BatchWriteItem.BatchWriteItem Aws.DynamoDb.Commands.BatchWriteItem.BatchWriteItemResponse
+ Aws.DynamoDb.Commands.BatchWriteItem: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Commands.BatchWriteItem.BatchWriteItemResponse
+ Aws.DynamoDb.Commands.BatchWriteItem: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Commands.BatchWriteItem.Request
+ Aws.DynamoDb.Commands.BatchWriteItem: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Commands.BatchWriteItem.BatchWriteItem
+ Aws.DynamoDb.Commands.BatchWriteItem: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Commands.BatchWriteItem.Request
+ Aws.DynamoDb.Commands.BatchWriteItem: instance GHC.Classes.Eq Aws.DynamoDb.Commands.BatchWriteItem.BatchWriteItem
+ Aws.DynamoDb.Commands.BatchWriteItem: instance GHC.Classes.Eq Aws.DynamoDb.Commands.BatchWriteItem.BatchWriteItemResponse
+ Aws.DynamoDb.Commands.BatchWriteItem: instance GHC.Classes.Eq Aws.DynamoDb.Commands.BatchWriteItem.Request
+ Aws.DynamoDb.Commands.BatchWriteItem: instance GHC.Classes.Ord Aws.DynamoDb.Commands.BatchWriteItem.BatchWriteItem
+ Aws.DynamoDb.Commands.BatchWriteItem: instance GHC.Classes.Ord Aws.DynamoDb.Commands.BatchWriteItem.BatchWriteItemResponse
+ Aws.DynamoDb.Commands.BatchWriteItem: instance GHC.Classes.Ord Aws.DynamoDb.Commands.BatchWriteItem.Request
+ Aws.DynamoDb.Commands.BatchWriteItem: instance GHC.Read.Read Aws.DynamoDb.Commands.BatchWriteItem.BatchWriteItem
+ Aws.DynamoDb.Commands.BatchWriteItem: instance GHC.Read.Read Aws.DynamoDb.Commands.BatchWriteItem.BatchWriteItemResponse
+ Aws.DynamoDb.Commands.BatchWriteItem: instance GHC.Read.Read Aws.DynamoDb.Commands.BatchWriteItem.Request
+ Aws.DynamoDb.Commands.BatchWriteItem: instance GHC.Show.Show Aws.DynamoDb.Commands.BatchWriteItem.BatchWriteItem
+ Aws.DynamoDb.Commands.BatchWriteItem: instance GHC.Show.Show Aws.DynamoDb.Commands.BatchWriteItem.BatchWriteItemResponse
+ Aws.DynamoDb.Commands.BatchWriteItem: instance GHC.Show.Show Aws.DynamoDb.Commands.BatchWriteItem.Request
+ Aws.DynamoDb.Commands.BatchWriteItem: toBatchWrite :: [PutItem] -> [DeleteItem] -> BatchWriteItem
+ Aws.DynamoDb.Core: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Core.PrimaryKey
- Aws: Configuration :: TimeInfo -> Credentials -> Logger -> Configuration
+ Aws: Configuration :: TimeInfo -> Credentials -> Logger -> Maybe Proxy -> Configuration
- Aws.Aws: Configuration :: TimeInfo -> Credentials -> Logger -> Configuration
+ Aws.Aws: Configuration :: TimeInfo -> Credentials -> Logger -> Maybe Proxy -> Configuration

Files

Aws/Aws.hs view
@@ -82,6 +82,7 @@       , credentials :: Credentials         -- | The error / message logger.       , logger      :: Logger+      , proxy       :: Maybe HTTP.Proxy       }  -- | The default configuration, with credentials loaded from environment variable or configuration file@@ -95,6 +96,7 @@                       timeInfo = Timestamp                     , credentials = cr'                     , logger = defaultLog Warning+                    , proxy = Nothing                     }  -- | Debug configuration, which logs much more verbosely.@@ -234,7 +236,9 @@   let !q = {-# SCC "unsafeAwsRef:signQuery" #-} signQuery request info sd   let logDebug = liftIO . logger cfg Debug . T.pack   logDebug $ "String to sign: " ++ show (sqStringToSign q)-  !httpRequest <- {-# SCC "unsafeAwsRef:httpRequest" #-} liftIO $ queryToHttpRequest q+  !httpRequest <- {-# SCC "unsafeAwsRef:httpRequest" #-} liftIO $ do+    req <- queryToHttpRequest q+    return $ req { HTTP.proxy = proxy cfg }   logDebug $ "Host: " ++ show (HTTP.host httpRequest)   logDebug $ "Path: " ++ show (HTTP.path httpRequest)   logDebug $ "Query string: " ++ show (HTTP.queryString httpRequest)
Aws/DynamoDb/Commands.hs view
@@ -1,5 +1,7 @@ module Aws.DynamoDb.Commands-    ( module Aws.DynamoDb.Commands.DeleteItem+    ( module Aws.DynamoDb.Commands.BatchGetItem+    , module Aws.DynamoDb.Commands.BatchWriteItem+    , module Aws.DynamoDb.Commands.DeleteItem     , module Aws.DynamoDb.Commands.GetItem     , module Aws.DynamoDb.Commands.PutItem     , module Aws.DynamoDb.Commands.Query@@ -9,6 +11,8 @@     ) where  -------------------------------------------------------------------------------+import           Aws.DynamoDb.Commands.BatchGetItem+import           Aws.DynamoDb.Commands.BatchWriteItem import           Aws.DynamoDb.Commands.DeleteItem import           Aws.DynamoDb.Commands.GetItem import           Aws.DynamoDb.Commands.PutItem
+ Aws/DynamoDb/Commands/BatchGetItem.hs view
@@ -0,0 +1,142 @@+{-# LANGUAGE DeriveDataTypeable        #-}+{-# LANGUAGE FlexibleContexts          #-}+{-# LANGUAGE FlexibleInstances         #-}+{-# LANGUAGE MultiParamTypeClasses     #-}+{-# LANGUAGE NoMonomorphismRestriction #-}+{-# LANGUAGE OverloadedStrings         #-}+{-# LANGUAGE RecordWildCards           #-}+{-# LANGUAGE ScopedTypeVariables       #-}+{-# LANGUAGE TypeFamilies              #-}+-----------------------------------------------------------------------------+-- |+-- Module      :  Aws.DynamoDb.Commands.BatchGetItem+-- Copyright   :  Soostone Inc+-- License     :  BSD3+--+-- Maintainer  :  Justin Dawson <jtdawso@gmail.com>+-- Stability   :  experimental+--+-- @http:\/\/docs.aws.amazon.com\/amazondynamodb\/latest\/APIReference\/API_BatchGetItem.html@+----------------------------------------------------------------------------++module Aws.DynamoDb.Commands.BatchGetItem where++-------------------------------------------------------------------------------+import           Control.Applicative+import           Data.Aeson+import           Data.Default+import qualified Data.HashMap.Strict as HM+import qualified Data.Text           as T+import           Prelude+-------------------------------------------------------------------------------+import           Aws.Core+import           Aws.DynamoDb.Core+import           Aws.DynamoDb.Commands.GetItem+-------------------------------------------------------------------------------+++data GetRequestItem = GetRequestItem{+         griProjExpr :: Maybe T.Text+       , griConsistent ::Bool+       , griKeys :: [PrimaryKey]  +     } deriving (Eq,Show,Read,Ord)++data BatchGetItem = BatchGetItem {+      bgRequests :: [(T.Text,GetRequestItem)]+    -- ^ Get Requests for a specified table+    , bgRetCons :: ReturnConsumption+    } deriving (Eq,Show,Read,Ord)++-------------------------------------------------------------------------------++-- | Construct a RequestItem .+batchGetRequestItem :: Maybe T.Text+               -- ^ Projection Expression+               -> Bool+               -- ^ Consistent Read+               -> [PrimaryKey]+               -- ^ Items to be deleted+               -> GetRequestItem+batchGetRequestItem expr consistent keys = GetRequestItem expr consistent keys++toBatchGet :: [GetItem] -> BatchGetItem+toBatchGet gs = BatchGetItem (convert gs) def++  where+    groupItems :: [GetItem]-> HM.HashMap T.Text [GetItem] -> HM.HashMap T.Text [GetItem]+    groupItems [] hm = hm+    groupItems (x:xs) hm = let key = giTableName x+                             in groupItems xs (HM.insert key (x : (HM.lookupDefault [] key hm)) hm)+    +    convert :: [GetItem] -> [(T.Text,GetRequestItem)] +    convert gs' = let l = HM.toList $ groupItems gs' HM.empty+                    -- Uses one GetItem to specify ProjectionExpression+                    -- and ConsistentRead for the entire batch+                    in map (\(table,items@(i:_)) ->(table,GetRequestItem +                                                    (T.intercalate "," <$> giAttrs i)+                                                    (giConsistent i)+                                                    (map giKey items)) ) l++-- | Construct a BatchGetItem+batchGetItem :: [(T.Text, GetRequestItem)]+               -> BatchGetItem+batchGetItem reqs = BatchGetItem reqs def+++instance ToJSON GetRequestItem where+   toJSON GetRequestItem{..} =+       (object $ maybe [] (return . ("ProjectionExpression" .=)) griProjExpr +++                 ["ConsistentRead" .= griConsistent+                 , "Keys" .= griKeys])+         ++instance ToJSON BatchGetItem where+    toJSON BatchGetItem{..} =+        object $+          [ "RequestItems" .= HM.fromList bgRequests+          , "ReturnConsumedCapacity" .= bgRetCons+          ]++instance FromJSON GetRequestItem where+    parseJSON (Object p) = do+                 GetRequestItem <$> p .:? "ProjectionExpression"+                                <*> p .: "ConsistentRead"+                                <*> p .: "Keys"+    parseJSON _ = fail "unable to parse GetRequestItem"+    +         +data BatchGetItemResponse = BatchGetItemResponse {+      bgResponses :: [(T.Text, [Item])]+    , bgUnprocessed    :: Maybe [(T.Text,GetRequestItem)]+    -- ^ Unprocessed Requests on failure+    , bgConsumed :: Maybe ConsumedCapacity+    -- ^ Amount of capacity consumed+    } deriving (Eq,Show,Read,Ord)++++instance Transaction BatchGetItem BatchGetItemResponse+++instance SignQuery BatchGetItem where+    type ServiceConfiguration BatchGetItem = DdbConfiguration+    signQuery gi = ddbSignQuery "BatchGetItem" gi+++instance FromJSON BatchGetItemResponse where+    parseJSON (Object v) = BatchGetItemResponse+        <$> (HM.toList <$> (v .: "Responses"))+        <*> v .:? "UnprocessedItems"+        <*> v .:? "ConsumedCapacity"++    parseJSON _ = fail "BatchGetItemResponse must be an object."++instance ResponseConsumer r BatchGetItemResponse where+    type ResponseMetadata BatchGetItemResponse = DdbResponse+    responseConsumer _ _ ref resp = ddbResponseConsumer ref resp++instance AsMemoryResponse BatchGetItemResponse where+    type MemoryResponse BatchGetItemResponse = BatchGetItemResponse+    loadToMemory = return++
+ Aws/DynamoDb/Commands/BatchWriteItem.hs view
@@ -0,0 +1,137 @@+{-# LANGUAGE DeriveDataTypeable        #-}+{-# LANGUAGE FlexibleContexts          #-}+{-# LANGUAGE FlexibleInstances         #-}+{-# LANGUAGE MultiParamTypeClasses     #-}+{-# LANGUAGE NoMonomorphismRestriction #-}+{-# LANGUAGE OverloadedStrings         #-}+{-# LANGUAGE RecordWildCards           #-}+{-# LANGUAGE ScopedTypeVariables       #-}+{-# LANGUAGE TypeFamilies              #-}+-----------------------------------------------------------------------------+-- |+-- Module      :  Aws.DynamoDb.Commands.BatchWriteItem+-- Copyright   :  Soostone Inc+-- License     :  BSD3+--+-- Maintainer  :  Justin Dawson <jtdawso@gmail.com>+-- Stability   :  experimental+--+-- @http:\/\/docs.aws.amazon.com\/amazondynamodb\/latest\/APIReference\/API_BatchWriteItem.html@+----------------------------------------------------------------------------++module Aws.DynamoDb.Commands.BatchWriteItem where++-------------------------------------------------------------------------------+import           Control.Applicative+import           Data.Aeson+import           Data.Default+import           Data.Foldable (asum)+import qualified Data.HashMap.Strict as HM+import qualified Data.Text           as T+import           Prelude+-------------------------------------------------------------------------------+import           Aws.Core+import           Aws.DynamoDb.Core+import           Aws.DynamoDb.Commands.PutItem+import           Aws.DynamoDb.Commands.DeleteItem+-------------------------------------------------------------------------------+++data Request = PutRequest { prItem :: Item }+             | DeleteRequest {drKey :: PrimaryKey}+     deriving (Eq,Show,Read,Ord)++data BatchWriteItem = BatchWriteItem {+      bwRequests :: [(T.Text,[Request])]+    -- ^ Put or Delete Requests for a specified table+    , bwRetCons :: ReturnConsumption+    , bwRetMet  :: ReturnItemCollectionMetrics+    } deriving (Eq,Show,Read,Ord)+++-------------------------------------------------------------------------------++toBatchWrite :: [PutItem]+           -> [DeleteItem]+           -> BatchWriteItem+toBatchWrite ps ds =BatchWriteItem maps def def  +      where+        maps :: [(T.Text,[Request])]+        maps = let pMap = foldl (\acc p -> let key = piTable p+                                             in HM.insert key (PutRequest (piItem p) : (HM.lookupDefault [] key acc)) acc) HM.empty ps +                   totalMap = foldl (\acc d -> let key = diTable d+                                                 in  HM.insert key (DeleteRequest (diKey d) : (HM.lookupDefault [] key acc)) acc) pMap ds+                 in  HM.toList totalMap+-- | Construct a BatchWriteItem+batchWriteItem :: [(T.Text,[Request])]+               -> BatchWriteItem+batchWriteItem reqs = BatchWriteItem reqs def def+++instance ToJSON Request where+   toJSON PutRequest{..} =+       object $+         [ "PutRequest" .= (object $ ["Item" .= prItem])+         ]+   toJSON DeleteRequest{..} =+       object $+         [ "DeleteRequest" .=  (object $ ["Key" .= drKey])+         ]++instance ToJSON BatchWriteItem where+    toJSON BatchWriteItem{..} =+        object $+          [ "RequestItems" .= HM.fromList bwRequests+          , "ReturnConsumedCapacity" .= bwRetCons+          , "ReturnItemCollectionMetrics" .= bwRetMet+          ]++instance FromJSON Request where+    parseJSON = withObject "PutRequest or DeleteRequest" $ \o ->+     +     asum [+           do+             pr <- o .: "PutRequest"+             i  <- pr .: "Item"+             return $ PutRequest i ,+           do+             dr <- o .: "DeleteRequest"+             pk <- dr .: "Key"+             return $ DeleteRequest pk+          ]+    +data BatchWriteItemResponse = BatchWriteItemResponse {+      bwUnprocessed    :: [(T.Text,[Request])]+    -- ^ Unprocessed Requests on failure+    , bwConsumed :: Maybe ConsumedCapacity+    -- ^ Amount of capacity consumed+    , bwColMet   :: Maybe ItemCollectionMetrics+    -- ^ Collection metrics for tables affected by BatchWriteItem.+    } deriving (Eq,Show,Read,Ord)++++instance Transaction BatchWriteItem BatchWriteItemResponse+++instance SignQuery BatchWriteItem where+    type ServiceConfiguration BatchWriteItem = DdbConfiguration+    signQuery gi = ddbSignQuery "BatchWriteItem" gi+++instance FromJSON BatchWriteItemResponse where+    parseJSON (Object v) = BatchWriteItemResponse+        <$> HM.toList <$> (v .: "UnprocessedItems")+        <*> v .:? "ConsumedCapacity"+        <*> v .:? "ItemCollectionMetrics"+    parseJSON _ = fail "BatchWriteItemResponse must be an object."+++instance ResponseConsumer r BatchWriteItemResponse where+    type ResponseMetadata BatchWriteItemResponse = DdbResponse+    responseConsumer _ _ ref resp = ddbResponseConsumer ref resp+++instance AsMemoryResponse BatchWriteItemResponse where+    type MemoryResponse BatchWriteItemResponse = BatchWriteItemResponse+    loadToMemory = return
Aws/DynamoDb/Commands/Table.hs view
@@ -38,6 +38,7 @@ import qualified Data.Aeson.Types      as A import           Data.Char             (toUpper) import qualified Data.HashMap.Strict   as M+import           Data.Scientific       (Scientific) import qualified Data.Text             as T import           Data.Time import           Data.Time.Clock.POSIX@@ -63,6 +64,10 @@ dropOpt d = A.defaultOptions { A.fieldLabelModifier = drop d }  +convertToUTCTime :: Scientific -> UTCTime+convertToUTCTime = posixSecondsToUTCTime . fromInteger . round++ -- | The type of a key attribute that appears in the table key or as a -- key in one of the indices. data AttributeType = AttrString | AttrNumber | AttrBinary@@ -211,8 +216,8 @@ instance A.FromJSON ProvisionedThroughputStatus where     parseJSON = A.withObject "Throughput status must be an object" $ \o ->         ProvisionedThroughputStatus-            <$> (posixSecondsToUTCTime . fromInteger <$> o .:? "LastDecreaseDateTime" .!= 0)-            <*> (posixSecondsToUTCTime . fromInteger <$> o .:? "LastIncreaseDateTime" .!= 0)+            <$> (convertToUTCTime <$> o .:? "LastDecreaseDateTime" .!= 0)+            <*> (convertToUTCTime <$> o .:? "LastIncreaseDateTime" .!= 0)             <*> o .:? "NumberOfDecreasesToday" .!= 0             <*> o .: "ReadCapacityUnits"             <*> o .: "WriteCapacityUnits"@@ -283,7 +288,7 @@         TableDescription <$> t .: "TableName"                          <*> t .: "TableSizeBytes"                          <*> t .: "TableStatus"-                         <*> (fmap (posixSecondsToUTCTime . fromInteger) <$> t .:? "CreationDateTime")+                         <*> (fmap convertToUTCTime <$> t .:? "CreationDateTime")                          <*> t .: "ItemCount"                          <*> t .:? "AttributeDefinitions" .!= []                          <*> t .:? "KeySchema"
Aws/DynamoDb/Core.hs view
@@ -532,6 +532,15 @@           Object p2 = toJSON r       in Object (p1 `HM.union` p2) +instance FromJSON PrimaryKey where+    parseJSON p = do+       l <- listPKey p+       case length l of+          1 -> return $ head l +          _ -> fail "Unable to parse PrimaryKey"     +      where listPKey p'= map (\(txt,dval)-> hk txt dval)+                          . HM.toList <$> parseJSON p'+  -- | A key-value pair data Attribute = Attribute {
Aws/Sqs/Commands/Message.hs view
@@ -133,9 +133,9 @@ userMessageAttributesQuery = concat . zipWith msgAttrQuery [1 :: Int ..]   where     msgAttrQuery i (name, value) =-        [ ( pre <> ".Name", Just $ TE.encodeUtf8 name )-        , ( pre <> ".Value.DataType", Just typ )-        , ( pre <> ".Value." <> valueKey, Just encodedValue )+        [ ( pre <> "Name", Just $ TE.encodeUtf8 name )+        , ( pre <> "Value.DataType", Just typ )+        , ( pre <> "Value." <> valueKey, Just encodedValue )         ]       where         pre = "MessageAttribute." <> B.pack (show i) <> "."@@ -488,22 +488,22 @@     -> Response SqsMetadata UserMessageAttributeValue readUserMessageAttributeValue cursor = do     typStr <- force "Missing DataType"-        $ cursor $/ Cu.laxElement "DataType" &/ Cu.content+        $ cursor $// Cu.laxElement "DataType" &/ Cu.content     case parseType typStr of         ("String", c) -> do             val <- force "Missing StringValue"-                $ cursor $/ Cu.laxElement "StringValue" &/ Cu.content+                $ cursor $// Cu.laxElement "StringValue" &/ Cu.content             return $ UserMessageAttributeString c val          ("Number", c) -> do             valStr <- force "Missing StringValue"-                $ cursor $/ Cu.laxElement "StringValue" &/ Cu.content+                $ cursor $// Cu.laxElement "StringValue" &/ Cu.content             val <- tryXml . readEither $ T.unpack valStr             return $ UserMessageAttributeNumber c val          ("Binary", c) -> do-            val64 <- force "Missing StringValue"-                $ cursor $/ Cu.laxElement "StringValue" &/ Cu.content+            val64 <- force "Missing BinaryValue"+                $ cursor $// Cu.laxElement "BinaryValue" &/ Cu.content             val <- tryXml . B64.decode $ TE.encodeUtf8 val64             return $ UserMessageAttributeBinary c val 
CHANGELOG.md view
@@ -1,3 +1,11 @@+0.17 series+-----------++-   0.17+    -   HTTP proxy support+    -   DDB: Support for additional interfaces, bug fixes+    -   Relax version bounds+ 0.16 series ----------- 
aws.cabal view
@@ -1,5 +1,5 @@ Name:                aws-Version:             0.16+Version:             0.17 Synopsis:            Amazon Web Services (AWS) for Haskell Description:         Bindings for Amazon Web Services (AWS), with the aim of supporting all AWS services. To see a high level overview of the library, see the README at <https://github.com/aristidb/aws/blob/master/README.md>. Homepage:            http://github.com/aristidb/aws@@ -19,7 +19,7 @@ Source-repository this   type: git   location: https://github.com/aristidb/aws.git-  tag: 0.16+  tag: 0.17  Source-repository head   type: git@@ -36,6 +36,8 @@                        Aws.Core                        Aws.DynamoDb                        Aws.DynamoDb.Commands+                       Aws.DynamoDb.Commands.BatchGetItem+                       Aws.DynamoDb.Commands.BatchWriteItem                        Aws.DynamoDb.Commands.DeleteItem                        Aws.DynamoDb.Commands.GetItem                        Aws.DynamoDb.Commands.PutItem@@ -140,12 +142,12 @@                        scientific           >= 0.3,                        tagged               >= 0.7     && < 0.9,                        text                 >= 0.11,-                       time                 >= 1.4.0   && < 1.7,+                       time                 >= 1.4.0   && < 2.0,                        transformers         >= 0.2.2   && < 0.6,                        unordered-containers >= 0.2,                        utf8-string          >= 0.3     && < 1.1,                        vector               >= 0.10,-                       xml-conduit          >= 1.2     && <1.5+                       xml-conduit          >= 1.2     && <2.0     if !impl(ghc >= 7.6)     Build-depends: ghc-prim@@ -345,7 +347,7 @@         base == 4.*,         bytestring >= 0.10,         errors >= 2.0,-        http-client >= 0.3 && < 0.5,+        http-client >= 0.3 && < 0.6,         lifted-base >= 0.2,         monad-control >= 0.3,         mtl >= 2.1,@@ -407,7 +409,7 @@         base == 4.*,         bytestring,         conduit-combinators,-        http-client < 0.5,+        http-client < 0.6,         http-client-tls < 0.5,         http-types,         resourcet,
tests/S3/Main.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP                        #-} {-# LANGUAGE DeriveDataTypeable         #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE OverloadedStrings          #-}@@ -30,6 +31,10 @@ import           Network.HTTP.Client          (HttpException (..),                                                RequestBody (..), newManager,                                                responseBody)+#if MIN_VERSION_http_client(0, 5, 0)+import           Network.HTTP.Client          (HttpExceptionContent (..),+                                               responseStatus)+#endif import           Network.HTTP.Client.TLS      (tlsManagerSettings) import           Network.HTTP.Types.Status import           System.Environment@@ -271,7 +276,13 @@     Right _ -> assertFailure ("Expected error with status " <> show expectedStatus <> ", but got success.")     Left _ -> return ()   where+#if MIN_VERSION_http_client(0, 5, 0)+    selector (HttpExceptionRequest _ (StatusCodeException res _))+      | statusCode (responseStatus res) == expectedStatus = Just ()+    selector _ = Nothing+#else     selector (StatusCodeException s _ _)       | statusCode s == expectedStatus = Just ()       | otherwise = Nothing     selector  _ = Nothing+#endif