amazonka-core 0.0.4 → 0.0.5
raw patch · 11 files changed
+197/−112 lines, 11 filesdep ~http-clientPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: http-client
API changes (from Hackage documentation)
- Network.AWS.Data: buildBS :: ToBuilder a => a -> ByteString
- Network.AWS.Signing.V2: instance Show (Meta V2)
- Network.AWS.Signing.V3: instance Show (Meta V3)
- Network.AWS.Signing.V4: instance Show (Meta V4)
- Network.AWS.Types: Debug :: (Text -> IO ()) -> Logger
- Network.AWS.Types: None :: Logger
- Network.AWS.Types: data Logger
- Network.AWS.Types: debug :: MonadIO m => Logger -> Text -> m ()
- Network.AWS.Types: instance ToText (Request a)
- Network.AWS.Types: instance ToText (Signed a v)
+ Network.AWS.Data: toQueryList :: ToQuery a => ByteString -> [a] -> Query
+ Network.AWS.Signing.V2: instance ToBuilder (Meta V2)
+ Network.AWS.Signing.V3: instance ToBuilder (Meta V3)
+ Network.AWS.Signing.V4: instance ToBuilder (Meta V4)
+ Network.AWS.Types: instance ToBuilder (Request a)
- Network.AWS.Types: _Errors :: Prism' (ServiceError a_awjc) [ServiceError a_awjc]
+ Network.AWS.Types: _Errors :: Prism' (ServiceError a_axal) [ServiceError a_axal]
- Network.AWS.Types: _HttpError :: Prism' (ServiceError a_awjc) HttpException
+ Network.AWS.Types: _HttpError :: Prism' (ServiceError a_axal) HttpException
- Network.AWS.Types: _SerializerError :: Prism' (ServiceError a_awjc) (Abbrev, String)
+ Network.AWS.Types: _SerializerError :: Prism' (ServiceError a_axal) (Abbrev, String)
- Network.AWS.Types: _ServiceError :: Prism' (ServiceError a_awjc) (Abbrev, Status, a_awjc)
+ Network.AWS.Types: _ServiceError :: Prism' (ServiceError a_axal) (Abbrev, Status, a_axal)
- Network.AWS.Types: rqBody :: Lens (Request a_awiV) (Request a_axuE) RqBody RqBody
+ Network.AWS.Types: rqBody :: Lens (Request a_axa4) (Request a_ayl2) RqBody RqBody
- Network.AWS.Types: rqHeaders :: Lens (Request a_awiV) (Request a_axuF) [Header] [Header]
+ Network.AWS.Types: rqHeaders :: Lens (Request a_axa4) (Request a_ayl3) [Header] [Header]
- Network.AWS.Types: rqMethod :: Lens (Request a_awiV) (Request a_axuG) StdMethod StdMethod
+ Network.AWS.Types: rqMethod :: Lens (Request a_axa4) (Request a_ayl4) StdMethod StdMethod
- Network.AWS.Types: rqPath :: Lens (Request a_awiV) (Request a_axuH) ByteString ByteString
+ Network.AWS.Types: rqPath :: Lens (Request a_axa4) (Request a_ayl5) ByteString ByteString
- Network.AWS.Types: rqQuery :: Lens (Request a_awiV) (Request a_axuI) Query Query
+ Network.AWS.Types: rqQuery :: Lens (Request a_axa4) (Request a_ayl6) Query Query
Files
- amazonka-core.cabal +2/−2
- src/Network/AWS/Data/Internal/Body.hs +24/−18
- src/Network/AWS/Data/Internal/ByteString.hs +94/−15
- src/Network/AWS/Data/Internal/List.hs +22/−10
- src/Network/AWS/Data/Internal/Map.hs +1/−1
- src/Network/AWS/Data/Internal/Query.hs +10/−13
- src/Network/AWS/Response.hs +2/−0
- src/Network/AWS/Signing/V2.hs +8/−6
- src/Network/AWS/Signing/V3.hs +7/−7
- src/Network/AWS/Signing/V4.hs +13/−10
- src/Network/AWS/Types.hs +14/−30
amazonka-core.cabal view
@@ -1,5 +1,5 @@ name: amazonka-core-version: 0.0.4+version: 0.0.5 synopsis: Core functionality, serialisation primitives, and data types for the Amazonka Amazon Web Services SDKs. homepage: https://github.com/brendanhay/amazonka license: OtherLicense@@ -81,7 +81,7 @@ , cryptohash-conduit >= 0.1.1 , data-default-class >= 0.0.1 , hashable >= 1.2- , http-client >= 0.3.6 && < 0.4+ , http-client >= 0.4.3 && < 0.5 , http-types >= 0.8 , lens >= 4.3 && < 5 , mmorph >= 1 && < 2
src/Network/AWS/Data/Internal/Body.hs view
@@ -13,26 +13,27 @@ module Network.AWS.Data.Internal.Body where -import Control.Lens import Control.Applicative+import Control.Lens import Control.Monad.IO.Class import Control.Monad.Morph import Control.Monad.Trans.Resource import Crypto.Hash-import qualified Crypto.Hash.Conduit as Conduit+import qualified Crypto.Hash.Conduit as Conduit import Data.Aeson-import Data.ByteString (ByteString)-import qualified Data.ByteString as BS-import qualified Data.ByteString.Lazy as LBS-import qualified Data.ByteString.Lazy.Char8 as LBS8+import Data.ByteString (ByteString)+import qualified Data.ByteString as BS+import qualified Data.ByteString.Builder as Build+import qualified Data.ByteString.Lazy as LBS+import qualified Data.ByteString.Lazy.Char8 as LBS8 import Data.Conduit-import qualified Data.Conduit.Binary as Conduit+import qualified Data.Conduit.Binary as Conduit import Data.IORef import Data.Int+import Data.List (intersperse) import Data.Monoid import Data.String-import qualified Data.Text as Text-import Network.AWS.Data.Internal.Text+import Network.AWS.Data.Internal.ByteString import Network.HTTP.Client import System.IO @@ -40,15 +41,15 @@ makePrisms ''RsBody -connectBody :: MonadResource m => RsBody -> Sink ByteString m a -> m a-connectBody (RsBody src) sink = hoist liftResourceT src $$+- sink--instance ToText RsBody where- toText = const "RsBody <body>"+instance ToBuilder RsBody where+ build = const "RsBody { ResumableSource (ResourceT IO) ByteString }" instance Show RsBody where- show = Text.unpack . toText+ show = LBS8.unpack . Build.toLazyByteString . build +connectBody :: MonadResource m => RsBody -> Sink ByteString m a -> m a+connectBody (RsBody src) sink = hoist liftResourceT src $$+- sink+ data RqBody = RqBody { _bdyHash :: Digest SHA256 , _bdyBody :: RequestBody@@ -59,11 +60,16 @@ bodyHash :: RqBody -> ByteString bodyHash = digestToHexByteString . _bdyHash -instance ToText RqBody where- toText (RqBody h _) = "RqBody " <> toText h <> " <body>"+instance ToBuilder RqBody where+ build x@(RqBody _ b) = mconcat $ intersperse "\n"+ [ " Body {"+ , " hash = " <> build (bodyHash x)+ , " payload =\n" <> build b+ , " }"+ ] instance Show RqBody where- show = Text.unpack . toText+ show = LBS8.unpack . Build.toLazyByteString . build . _bdyBody instance IsString RqBody where fromString = toBody . LBS8.pack
src/Network/AWS/Data/Internal/ByteString.hs view
@@ -1,5 +1,8 @@ {-# LANGUAGE DefaultSignatures #-} {-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-} -- Copyright : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com> -- License : This Source Code Form is subject to the terms of@@ -12,13 +15,9 @@ module Network.AWS.Data.Internal.ByteString ( LazyByteString- , ToByteString (..)- , showBS- , ToBuilder (..)- , buildBS-+ , showBS , stripBS ) where @@ -32,11 +31,14 @@ import qualified Data.CaseInsensitive as CI import Data.Char import Data.Int+import Data.List (intersperse)+import Data.Monoid import Data.Text (Text) import qualified Data.Text.Encoding as Text import Data.Time (UTCTime) import Network.AWS.Data.Internal.Text-import Network.HTTP.Types.Method+import Network.HTTP.Client+import Network.HTTP.Types import Numeric.Natural type LazyByteString = LBS.ByteString@@ -77,17 +79,94 @@ build = build . toBS {-# INLINE build #-} -instance ToBuilder Builder where build = id-instance ToBuilder ByteString where build = Build.byteString-instance ToBuilder Char where build = Build.charUtf8-instance ToBuilder [Char] where build = Build.stringUtf8-instance ToBuilder Int where build = Build.intDec-instance ToBuilder Int64 where build = Build.int64Dec-instance ToBuilder Integer where build = Build.integerDec-instance ToBuilder Natural where build = Build.integerDec . toInteger-instance ToBuilder Double where build = Build.doubleDec+instance ToBuilder Builder where build = id+instance ToBuilder ByteString where build = Build.byteString+instance ToBuilder LazyByteString where build = Build.lazyByteString+instance ToBuilder Text where build = Build.byteString . Text.encodeUtf8+instance ToBuilder Char where build = Build.charUtf8+instance ToBuilder [Char] where build = Build.stringUtf8+instance ToBuilder Int where build = Build.intDec+instance ToBuilder Int64 where build = Build.int64Dec+instance ToBuilder Integer where build = Build.integerDec+instance ToBuilder Natural where build = Build.integerDec . toInteger+instance ToBuilder Double where build = Build.doubleDec instance ToBuilder StdMethod instance ToBuilder (Digest a)++instance ToBuilder Bool where+ build True = "True"+ build False = "False"++instance ToBuilder UTCTime where+ build = Build.stringUtf8 . show++instance ToBuilder a => ToBuilder (Maybe a) where+ build Nothing = "Nothing"+ build (Just x) = "Just " <> build x++instance ToBuilder a => ToBuilder (CI a) where+ build = build . CI.foldedCase++instance ToBuilder [Header] where+ build = mconcat+ . intersperse "; "+ . map (\(k, v) -> build k <> ": " <> build v)++instance ToBuilder HttpVersion where+ build HttpVersion{..} = "HTTP/"+ <> build httpMajor+ <> build '.'+ <> build httpMinor++instance ToBuilder RequestBody where+ build = \case+ RequestBodyLBS lbs+ | n <= m -> build lbs+ | otherwise -> " <lazy:" <> build n <> ">"+ where+ n = LBS.length lbs++ RequestBodyBS bs+ | n <= fromIntegral m -> build bs+ | otherwise -> " <strict:" <> build n <> ">"+ where+ n = BS.length bs++ RequestBodyBuilder n _ -> " <builder:" <> build n <> ">"+ RequestBodyStream n _ -> " <stream:" <> build n <> ">"+ RequestBodyStreamChunked _ -> " <chunked>"+ where+ m :: Int64+ m = 4096++instance ToBuilder Request where+ build x = mconcat $ intersperse "\n"+ [ "[Client Request] {"+ , " host = " <> build (host x)+ , " port = " <> build (port x)+ , " secure = " <> build (secure x)+ , " headers = " <> build (requestHeaders x)+ , " path = " <> build (path x)+ , " query = " <> build (queryString x)+ , " method = " <> build (method x)+ , " redirect count = " <> build (redirectCount x)+ , " response timeout = " <> build (responseTimeout x)+ , " request version = " <> build (requestVersion x)+ , "}"+ ]++instance ToBuilder (Response a) where+ build x = mconcat $ intersperse "\n"+ [ "[Client Response] {"+ , " status code = " <> build (statusCode s)+ , " status message = " <> build (statusMessage s)+ , " version = " <> build (responseVersion x)+ , " headers = " <> build (responseHeaders x)+ , " cookies = " <> build (show (responseCookieJar x))+ , "}"+ ]+ where+ s = responseStatus x stripBS :: ByteString -> ByteString stripBS = BS.dropWhile isSpace . fst . BS.spanEnd isSpace
src/Network/AWS/Data/Internal/List.hs view
@@ -23,21 +23,23 @@ module Network.AWS.Data.Internal.List where -import Control.Lens hiding (coerce, element)+import Control.Lens hiding (coerce, element) import Control.Monad import Data.Aeson+import Data.ByteString (ByteString) import Data.Coerce-import Data.Foldable (Foldable)-import Data.List.NonEmpty (NonEmpty(..))+import Data.Foldable (Foldable)+import Data.List.NonEmpty (NonEmpty(..)) import Data.Maybe import Data.Monoid import Data.Proxy-import Data.Semigroup (Semigroup)+import Data.Semigroup (Semigroup) import Data.String-import qualified Data.Text as Text-import qualified Data.Vector as Vector+import qualified Data.Text as Text+import qualified Data.Vector as Vector import GHC.Exts import GHC.TypeLits+import Network.AWS.Data.Internal.ByteString import Network.AWS.Data.Internal.Query import Network.AWS.Data.Internal.XML import Text.XML@@ -75,11 +77,21 @@ = Right $ List1 (x :| xs) toList1 _ = Left $ "Unexpected empty list, expected at least 1 element." -instance ToQuery a => ToQuery (List e a) where- toQuery = toQuery . list+toQueryList :: ToQuery a => ByteString -> [a] -> Query+toQueryList n = mconcat . zipWith (\i v -> n =? (toBS i, v)) idx+ where+ idx = [1..] :: [Int]+{-# INLINE toQueryList #-} -instance ToQuery a => ToQuery (List1 e a) where- toQuery = toQuery . toList . list1+instance (KnownSymbol e, ToQuery a) => ToQuery (List e a) where+ toQuery = toQueryList n . toList . list+ where+ n = fromString $ symbolVal (Proxy :: Proxy e)++instance (KnownSymbol e, ToQuery a) => ToQuery (List1 e a) where+ toQuery = toQueryList n . toList . list1+ where+ n = fromString $ symbolVal (Proxy :: Proxy e) instance FromJSON a => FromJSON (List e a) where parseJSON = fmap List . parseJSON
src/Network/AWS/Data/Internal/Map.hs view
@@ -123,7 +123,7 @@ , ToQuery k , ToQuery v ) => ToQuery (EMap e i j k v) where- toQuery m = toBS e =? (mconcat . zipWith go idx $ toList m)+ toQuery m = e =? (mconcat . zipWith go idx $ toList m) where go n (k, v) = toBS n =? toQuery (i, k) <> toQuery (j, v)
src/Network/AWS/Data/Internal/Query.hs view
@@ -30,8 +30,7 @@ , (=?) ) where -import Control.Applicative-import Control.Lens hiding (to, from)+import Control.Lens import Data.ByteString (ByteString) import qualified Data.ByteString.Char8 as BS import Data.Data@@ -69,8 +68,10 @@ instance ToByteString Query where toBS = renderQuery +instance ToBuilder Query+ instance ToText Query where- toText = Text.decodeUtf8 . renderQuery+ toText = Text.decodeUtf8 . toBS instance IsString Query where fromString = toQuery . BS.pack@@ -120,10 +121,6 @@ toQuery (k, v) = Pair (toBS k) (toQuery v) {-# INLINE toQuery #-} -instance (ToByteString k, ToByteString v) => ToQuery (k, Maybe v) where- toQuery (k, v) = Pair (toBS k) . Value $ toBS <$> v- {-# INLINE toQuery #-}- instance ToQuery Char where toQuery = toQuery . BS.singleton {-# INLINE toQuery #-}@@ -139,15 +136,15 @@ instance ToQuery Double where toQuery = toQuery . toBS instance ToQuery Natural where toQuery = toQuery . toBS -instance ToQuery a => ToQuery [a] where- toQuery = List . zipWith (\n v -> Pair (toBS n) (toQuery v)) idx- where- idx = [1..] :: [Integer]- {-# INLINE toQuery #-}- instance ToQuery a => ToQuery (Maybe a) where toQuery (Just x) = toQuery x toQuery Nothing = mempty+ {-# INLINE toQuery #-}++instance ToQuery a => ToQuery [a] where+ toQuery = List . zipWith (\n v -> toBS n =? toQuery v) idx+ where+ idx = [1..] :: [Integer] {-# INLINE toQuery #-} instance ToQuery Bool where
src/Network/AWS/Response.hs view
@@ -108,6 +108,7 @@ case f hs o of Left e -> Left (SerializerError a e) Right x -> Right x+{-# INLINE deserialise #-} receive :: forall m a. (MonadResource m, AWSService (Sv a)) => (Abbrev -> ResponseHeaders -> ResponseBody -> m (Response a))@@ -126,6 +127,7 @@ s = responseStatus rs bdy = responseBody rs hs = responseHeaders rs+{-# INLINE receive #-} sinkLbs :: MonadResource m => ResponseBody -> m LBS.ByteString sinkLbs bdy = liftResourceT (bdy $$+- Conduit.sinkLbs)
src/Network/AWS/Signing/V2.hs view
@@ -4,7 +4,7 @@ {-# LANGUAGE TupleSections #-} {-# LANGUAGE TypeFamilies #-} --- Module : Network.AWS.Signing.V2+-- Module : Network.AWS.Signaing.V2 -- Copyright : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com> -- License : This Source Code Form is subject to the terms of -- the Mozilla Public License, v. 2.0.@@ -29,6 +29,7 @@ import Data.ByteString (ByteString) import qualified Data.ByteString.Base64 as Base64 import qualified Data.ByteString.Char8 as BS+import Data.List (intersperse) import Data.Monoid import Data.Time import Network.AWS.Data@@ -44,11 +45,12 @@ , _mTime :: UTCTime } -instance Show (Meta V2) where- show Meta{..} = BS.unpack $ BS.unlines- [ "Version 2 Metadata:"- , "_mSignature " <> _mSignature- , "_mTime " <> toBS _mTime+instance ToBuilder (Meta V2) where+ build Meta{..} = mconcat $ intersperse "\n"+ [ "[Version 2 Metadata] {"+ , " signature = " <> build _mSignature+ , " time = " <> build _mTime+ , "}" ] instance AWSSigner V2 where
src/Network/AWS/Signing/V3.hs view
@@ -28,8 +28,7 @@ import Control.Lens import Data.ByteString (ByteString) import qualified Data.ByteString.Base64 as Base64-import qualified Data.ByteString.Char8 as BS-import Data.List (sortBy)+import Data.List (sortBy, intersperse) import Data.Maybe import Data.Monoid import Data.Ord@@ -47,11 +46,12 @@ , _mTime :: UTCTime } -instance Show (Meta V3) where- show Meta{..} = BS.unpack $ BS.unlines- [ "Version 3 Metadata:"- , "_mSignature " <> _mSignature- , "_mTime " <> toBS _mTime+instance ToBuilder (Meta V3) where+ build Meta{..} = mconcat $ intersperse "\n"+ [ "[Version 3 Metadata] {"+ , " signature = " <> build _mSignature+ , " time = " <> build _mTime+ , "}" ] instance AWSSigner V3 where
src/Network/AWS/Signing/V4.hs view
@@ -58,16 +58,19 @@ , _mTime :: UTCTime } -instance Show (Meta V4) where- show Meta{..} = BS.unpack $ BS.unlines- [ "Version 4 Metadata:"- , "_mAlgorithm " <> _mAlgorithm- , "_mScope " <> _mScope- , "_mSigned " <> _mSigned- , "_mCReq " <> _mCReq- , "_mSTS " <> _mSTS- , "_mSignature " <> _mSignature- , "_mTime " <> toBS _mTime+instance ToBuilder (Meta V4) where+ build Meta{..} = mconcat $ intersperse "\n"+ [ "[Version 4 Metadata] {"+ , " algorithm = " <> build _mAlgorithm+ , " credential scope = " <> build _mScope+ , " signed headers = " <> build _mSigned+ , " canonical request = {"+ , build _mCReq+ , " }"+ , " string to sign = " <> build _mSTS+ , " signature = " <> build _mSignature+ , " time = " <> build _mTime+ , "}" ] instance AWSPresigner V4 where
src/Network/AWS/Types.hs view
@@ -35,10 +35,6 @@ , Auth (..) , withAuth - -- * Logger- , Logger (..)- , debug- -- * Services , Abbrev , AWSService (..)@@ -113,6 +109,7 @@ import qualified Data.HashSet as Set import Data.Hashable import Data.IORef+import Data.List (intersperse) import Data.Monoid import Data.String import Data.Text (Text)@@ -205,7 +202,7 @@ -- | A signed 'ClientRequest' and associated metadata specific to the signing -- algorithm that was used. data Signed a v where- Signed :: Show (Meta v)+ Signed :: ToBuilder (Meta v) => { _sgMeta :: Meta v , _sgRequest :: ClientRequest }@@ -217,13 +214,6 @@ sgRequest :: Lens' (Signed a v) ClientRequest sgRequest f (Signed m rq) = f rq <&> \y -> Signed m y -instance ToText (Signed a v) where- toText (Signed m rq) = Text.unlines- [ Text.pack (show m)- , "HTTP Request:"- , Text.pack (show rq)- ]- class AWSSigner v where signed :: (AWSService (Sv a), v ~ Sg (Sv a)) => AuthEnv@@ -297,16 +287,6 @@ withAuth (Auth e) f = f e withAuth (Ref _ r) f = liftIO (readIORef r) >>= f --- | The log level and associated logger function.-data Logger- = None- | Debug (Text -> IO ())---- | Log a message using the debug logger, or if none is specified noop.-debug :: MonadIO m => Logger -> Text -> m ()-debug None = const (return ())-debug (Debug f) = liftIO . f- data Endpoint = Endpoint { _endpointHost :: ByteString , _endpointScope :: ByteString@@ -405,14 +385,18 @@ instance Default (Request a) where def = Request GET "/" mempty mempty "" -instance ToText (Request a) where- toText Request{..} = Text.unlines- [ "Request:"- , "_rqMethod = " <> toText _rqMethod- , "_rqPath = " <> toText _rqPath- , "_rqQuery = " <> toText _rqQuery- , "_rqHeaders = " <> toText _rqHeaders- , "_rqBody = " <> toText _rqBody+instance ToBuilder (Request a) where+ build Request{..} = mconcat $ intersperse "\n"+ [ "[Raw Request] {"+ , " method = " <> build _rqMethod+ , " path = " <> build _rqPath+ , " query = " <> build _rqQuery+ , " headers = " <> build _rqHeaders+ , " body = {"+ , " hash = " <> build (bodyHash _rqBody)+ , " payload =\n" <> build (_bdyBody _rqBody)+ , " }"+ , "}" ] -- | The sum of available AWS regions.