aws 0.14.0 → 0.14.1
raw patch · 6 files changed
+34/−22 lines, 6 filesdep ~aesondep ~http-clientdep ~http-client-tlsPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: aeson, http-client, http-client-tls
API changes (from Hackage documentation)
- Aws.DynamoDb.Commands.DeleteItem: instance Data.Aeson.Types.Class.FromJSON Aws.DynamoDb.Commands.DeleteItem.DeleteItemResponse
- Aws.DynamoDb.Commands.DeleteItem: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Commands.DeleteItem.DeleteItem
- Aws.DynamoDb.Commands.GetItem: instance Data.Aeson.Types.Class.FromJSON Aws.DynamoDb.Commands.GetItem.GetItemResponse
- Aws.DynamoDb.Commands.GetItem: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Commands.GetItem.GetItem
- Aws.DynamoDb.Commands.PutItem: instance Data.Aeson.Types.Class.FromJSON Aws.DynamoDb.Commands.PutItem.PutItemResponse
- Aws.DynamoDb.Commands.PutItem: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Commands.PutItem.PutItem
- Aws.DynamoDb.Commands.Query: instance Data.Aeson.Types.Class.FromJSON Aws.DynamoDb.Commands.Query.QueryResponse
- Aws.DynamoDb.Commands.Query: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Commands.Query.Query
- Aws.DynamoDb.Commands.Scan: instance Data.Aeson.Types.Class.FromJSON Aws.DynamoDb.Commands.Scan.ScanResponse
- Aws.DynamoDb.Commands.Scan: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Commands.Scan.Scan
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.FromJSON Aws.DynamoDb.Commands.Table.AttributeDefinition
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.FromJSON Aws.DynamoDb.Commands.Table.AttributeType
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.FromJSON Aws.DynamoDb.Commands.Table.CreateTableResult
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.FromJSON Aws.DynamoDb.Commands.Table.DeleteTableResult
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.FromJSON Aws.DynamoDb.Commands.Table.DescribeTableResult
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.FromJSON Aws.DynamoDb.Commands.Table.GlobalSecondaryIndex
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.FromJSON Aws.DynamoDb.Commands.Table.GlobalSecondaryIndexStatus
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.FromJSON Aws.DynamoDb.Commands.Table.KeySchema
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.FromJSON Aws.DynamoDb.Commands.Table.ListTablesResult
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.FromJSON Aws.DynamoDb.Commands.Table.LocalSecondaryIndex
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.FromJSON Aws.DynamoDb.Commands.Table.LocalSecondaryIndexStatus
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.FromJSON Aws.DynamoDb.Commands.Table.Projection
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.FromJSON Aws.DynamoDb.Commands.Table.ProvisionedThroughput
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.FromJSON Aws.DynamoDb.Commands.Table.ProvisionedThroughputStatus
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.FromJSON Aws.DynamoDb.Commands.Table.TableDescription
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.FromJSON Aws.DynamoDb.Commands.Table.UpdateTableResult
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Commands.Table.AttributeDefinition
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Commands.Table.AttributeType
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Commands.Table.CreateTable
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Commands.Table.DeleteTable
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Commands.Table.DescribeTable
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Commands.Table.GlobalSecondaryIndex
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Commands.Table.GlobalSecondaryIndexUpdate
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Commands.Table.KeySchema
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Commands.Table.ListTables
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Commands.Table.LocalSecondaryIndex
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Commands.Table.Projection
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Commands.Table.ProvisionedThroughput
- Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Commands.Table.UpdateTable
- Aws.DynamoDb.Commands.UpdateItem: instance Data.Aeson.Types.Class.FromJSON Aws.DynamoDb.Commands.UpdateItem.UpdateItemResponse
- Aws.DynamoDb.Commands.UpdateItem: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Commands.UpdateItem.AttributeUpdates
- Aws.DynamoDb.Commands.UpdateItem: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Commands.UpdateItem.UpdateAction
- Aws.DynamoDb.Commands.UpdateItem: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Commands.UpdateItem.UpdateItem
- Aws.DynamoDb.Commands.UpdateItem: type AttributeUpdates = [AttributeUpdate]
- Aws.DynamoDb.Core: instance Data.Aeson.Types.Class.FromJSON Aws.DynamoDb.Core.AmazonError
- Aws.DynamoDb.Core: instance Data.Aeson.Types.Class.FromJSON Aws.DynamoDb.Core.ConsumedCapacity
- Aws.DynamoDb.Core: instance Data.Aeson.Types.Class.FromJSON Aws.DynamoDb.Core.DValue
- Aws.DynamoDb.Core: instance Data.Aeson.Types.Class.FromJSON Aws.DynamoDb.Core.ItemCollectionMetrics
- Aws.DynamoDb.Core: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Core.Attribute
- Aws.DynamoDb.Core: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Core.CondOp
- Aws.DynamoDb.Core: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Core.DValue
- Aws.DynamoDb.Core: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Core.PrimaryKey
- Aws.DynamoDb.Core: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Core.ReturnConsumption
- Aws.DynamoDb.Core: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Core.ReturnItemCollectionMetrics
- Aws.DynamoDb.Core: instance Data.Aeson.Types.Class.ToJSON Aws.DynamoDb.Core.UpdateReturn
+ Aws.DynamoDb.Commands.DeleteItem: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Commands.DeleteItem.DeleteItemResponse
+ Aws.DynamoDb.Commands.DeleteItem: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Commands.DeleteItem.DeleteItem
+ Aws.DynamoDb.Commands.GetItem: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Commands.GetItem.GetItemResponse
+ Aws.DynamoDb.Commands.GetItem: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Commands.GetItem.GetItem
+ Aws.DynamoDb.Commands.PutItem: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Commands.PutItem.PutItemResponse
+ Aws.DynamoDb.Commands.PutItem: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Commands.PutItem.PutItem
+ Aws.DynamoDb.Commands.Query: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Commands.Query.QueryResponse
+ Aws.DynamoDb.Commands.Query: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Commands.Query.Query
+ Aws.DynamoDb.Commands.Scan: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Commands.Scan.ScanResponse
+ Aws.DynamoDb.Commands.Scan: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Commands.Scan.Scan
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Commands.Table.AttributeDefinition
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Commands.Table.AttributeType
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Commands.Table.CreateTableResult
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Commands.Table.DeleteTableResult
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Commands.Table.DescribeTableResult
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Commands.Table.GlobalSecondaryIndex
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Commands.Table.GlobalSecondaryIndexStatus
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Commands.Table.KeySchema
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Commands.Table.ListTablesResult
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Commands.Table.LocalSecondaryIndex
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Commands.Table.LocalSecondaryIndexStatus
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Commands.Table.Projection
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Commands.Table.ProvisionedThroughput
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Commands.Table.ProvisionedThroughputStatus
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Commands.Table.TableDescription
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Commands.Table.UpdateTableResult
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Commands.Table.AttributeDefinition
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Commands.Table.AttributeType
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Commands.Table.CreateTable
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Commands.Table.DeleteTable
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Commands.Table.DescribeTable
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Commands.Table.GlobalSecondaryIndex
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Commands.Table.GlobalSecondaryIndexUpdate
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Commands.Table.KeySchema
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Commands.Table.ListTables
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Commands.Table.LocalSecondaryIndex
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Commands.Table.Projection
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Commands.Table.ProvisionedThroughput
+ Aws.DynamoDb.Commands.Table: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Commands.Table.UpdateTable
+ Aws.DynamoDb.Commands.UpdateItem: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Commands.UpdateItem.UpdateItemResponse
+ Aws.DynamoDb.Commands.UpdateItem: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Commands.UpdateItem.AttributeUpdates
+ Aws.DynamoDb.Commands.UpdateItem: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Commands.UpdateItem.UpdateAction
+ Aws.DynamoDb.Commands.UpdateItem: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Commands.UpdateItem.UpdateItem
+ Aws.DynamoDb.Core: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Core.AmazonError
+ Aws.DynamoDb.Core: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Core.ConsumedCapacity
+ Aws.DynamoDb.Core: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Core.DValue
+ Aws.DynamoDb.Core: instance Data.Aeson.Types.FromJSON.FromJSON Aws.DynamoDb.Core.ItemCollectionMetrics
+ Aws.DynamoDb.Core: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Core.Attribute
+ Aws.DynamoDb.Core: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Core.CondOp
+ Aws.DynamoDb.Core: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Core.DValue
+ Aws.DynamoDb.Core: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Core.PrimaryKey
+ Aws.DynamoDb.Core: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Core.ReturnConsumption
+ Aws.DynamoDb.Core: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Core.ReturnItemCollectionMetrics
+ Aws.DynamoDb.Core: instance Data.Aeson.Types.ToJSON.ToJSON Aws.DynamoDb.Core.UpdateReturn
Files
- Aws/DynamoDb/Commands/UpdateItem.hs +15/−4
- Aws/S3/Commands/GetService.hs +1/−3
- Aws/S3/Commands/PutObject.hs +1/−1
- Aws/SimpleDb/Core.hs +10/−10
- CHANGELOG.md +3/−0
- aws.cabal +4/−4
Aws/DynamoDb/Commands/UpdateItem.hs view
@@ -19,7 +19,15 @@ -- ---------------------------------------------------------------------------- -module Aws.DynamoDb.Commands.UpdateItem where+module Aws.DynamoDb.Commands.UpdateItem+ ( UpdateItem(..)+ , updateItem+ , AttributeUpdate(..)+ , au+ , UpdateAction(..)+ , UpdateItem(..)+ , UpdateItemResponse(..)+ ) where ------------------------------------------------------------------------------- import Control.Applicative@@ -55,7 +63,10 @@ updateItem tn key ups = UpdateItem tn key ups def def def def -type AttributeUpdates = [AttributeUpdate]+-- | A helper to avoid overlapping instances for 'ToJSON'.+newtype AttributeUpdates = AttributeUpdates {+ getAttributeUpdates :: [AttributeUpdate]+ } data AttributeUpdate = AttributeUpdate {@@ -77,7 +88,7 @@ instance ToJSON AttributeUpdates where- toJSON = object . map mk+ toJSON = object . map mk . getAttributeUpdates where mk AttributeUpdate { auAction = UDelete, auAttr = auAttr } = (attrName auAttr) .= object@@ -114,7 +125,7 @@ object $ expectsJson uiExpect ++ [ "TableName" .= uiTable , "Key" .= uiKey- , "AttributeUpdates" .= uiUpdates+ , "AttributeUpdates" .= AttributeUpdates uiUpdates , "ReturnValues" .= uiReturn , "ReturnConsumedCapacity" .= uiRetCons , "ReturnItemCollectionMetrics" .= uiRetMet
Aws/S3/Commands/GetService.hs view
@@ -6,9 +6,7 @@ import Aws.S3.Core import Data.Maybe import Data.Time.Format-#if MIN_VERSION_time(1,5,0)-import Data.Time.Format-#else+#if !MIN_VERSION_time(1,5,0) import System.Locale #endif import Text.XML.Cursor (($/), ($//), (&|))
Aws/S3/Commands/PutObject.hs view
@@ -66,7 +66,7 @@ , ("x-amz-storage-class",) <$> writeStorageClass <$> poStorageClass , ("x-amz-website-redirect-location",) <$> poWebsiteRedirectLocation , ("x-amz-server-side-encryption",) <$> writeServerSideEncryption <$> poServerSideEncryption- , if poAutoMakeBucket then Just ("x-amz-auto-make-bucket", "1") else Nothing+ , if poAutoMakeBucket then Just ("x-amz-auto-make-bucket", "1") else Nothing ] ++ map( \x -> (CI.mk . T.encodeUtf8 $ T.concat ["x-amz-meta-", fst x], snd x)) poMetadata , s3QOtherHeaders = map (second T.encodeUtf8) $ catMaybes [ ("Expires",) . T.pack . show <$> poExpires
Aws/SimpleDb/Core.hs view
@@ -32,7 +32,7 @@ instance C.Exception SdbError -data SdbMetadata +data SdbMetadata = SdbMetadata { requestId :: Maybe T.Text , boxUsage :: Maybe T.Text@@ -63,11 +63,11 @@ debugServiceConfig = sdbHttpPost sdbUsEast instance DefaultServiceConfiguration (SdbConfiguration UriOnlyQuery) where- defServiceConfig = sdbHttpsGet sdbUsEast + defServiceConfig = sdbHttpsGet sdbUsEast debugServiceConfig = sdbHttpGet sdbUsEast- + sdbUsEast :: B.ByteString-sdbUsEast = "sdb.amazonaws.com" +sdbUsEast = "sdb.amazonaws.com" sdbUsWest :: B.ByteString sdbUsWest = "sdb.us-west-1.amazonaws.com"@@ -80,16 +80,16 @@ sdbApNortheast :: B.ByteString sdbApNortheast = "sdb.ap-northeast-1.amazonaws.com"- + sdbHttpGet :: B.ByteString -> SdbConfiguration qt sdbHttpGet endpoint = SdbConfiguration HTTP Get endpoint (defaultPort HTTP)- + sdbHttpPost :: B.ByteString -> SdbConfiguration NormalQuery sdbHttpPost endpoint = SdbConfiguration HTTP PostQuery endpoint (defaultPort HTTP)- + sdbHttpsGet :: B.ByteString -> SdbConfiguration qt sdbHttpsGet endpoint = SdbConfiguration HTTPS Get endpoint (defaultPort HTTPS)- + sdbHttpsPost :: B.ByteString -> SdbConfiguration NormalQuery sdbHttpsPost endpoint = SdbConfiguration HTTPS PostQuery endpoint (defaultPort HTTPS) @@ -122,13 +122,13 @@ , ("AWSAccessKeyId", accessKeyID cr) , ("SignatureMethod", amzHash ah) , ("SignatureVersion", "2")]- ++ maybe [] (\tok -> [("SecurityToken", tok)]) (iamToken cr)+ ++ maybe [] (\tok -> [("SecurityToken", tok)]) (iamToken cr) sq = ("Signature", Just sig) : q' method = sdbiHttpMethod si host = sdbiHost si path = "/" sig = signature cr ah stringToSign- stringToSign = Blaze.toByteString . mconcat $ + stringToSign = Blaze.toByteString . mconcat $ intersperse (Blaze8.fromChar '\n') [Blaze.copyByteString $ httpMethod method , Blaze.copyByteString $ host
CHANGELOG.md view
@@ -2,6 +2,9 @@ NOTES: 0.14 brings potentially breaking changes +- 0.14.1+ - Eliminate orphan instance that conflicted with aeson-1.0+ - Add upper bound on http-client in testsuite - 0.14 - transformers 0.5 support - data-default 0.6 support (also in 0.13.1)
aws.cabal view
@@ -1,5 +1,5 @@ Name: aws-Version: 0.14.0+Version: 0.14.1 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@@ -327,7 +327,7 @@ base == 4.*, bytestring >= 0.10, errors >= 2.0,- http-client >= 0.3,+ http-client >= 0.3 && < 0.5, lifted-base >= 0.2, monad-control >= 0.3, mtl >= 2.1,@@ -388,8 +388,8 @@ aws, base == 4.*, bytestring,- http-client,- http-client-tls,+ http-client < 0.5,+ http-client-tls < 0.5, http-types, resourcet, tasty >= 0.8,