dynamic 0.0.7 → 0.1.0
raw patch · 3 files changed
+56/−21 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Dynamic: post :: Dynamic -> [(Dynamic, Dynamic)] -> Dynamic -> IO Text
- Dynamic: get :: Dynamic -> IO Text
+ Dynamic: get :: Dynamic -> [(Dynamic, Dynamic)] -> IO Text
- Dynamic: getJson :: Dynamic -> IO Dynamic
+ Dynamic: getJson :: Dynamic -> [(Dynamic, Dynamic)] -> IO Dynamic
- Dynamic: postJson :: Dynamic -> Dynamic -> IO Text
+ Dynamic: postJson :: Dynamic -> [(Dynamic, Dynamic)] -> Dynamic -> IO Dynamic
Files
- README.md +1/−1
- dynamic.cabal +1/−1
- src/Dynamic.hs +54/−19
README.md view
@@ -70,7 +70,7 @@ ## Web requests! ```json-> chris <- getJson "https://api.github.com/users/chrisdone"+> chris <- getJson "https://api.github.com/users/chrisdone" [] > chris { "bio": null,
dynamic.cabal view
@@ -1,5 +1,5 @@ name: dynamic-version: 0.0.7+version: 0.1.0 synopsis: A dynamic type for Haskell description: Want to do dynamically typed programming in Haskell sometimes? Here you go! homepage: https://github.com/chrisdone/dynamic#readme
src/Dynamic.hs view
@@ -37,6 +37,7 @@ , toElems -- * Web requests , get+ , post , getJson , postJson ) where@@ -46,11 +47,13 @@ import qualified Data.Aeson as Aeson import qualified Data.Aeson.Encode.Pretty as Aeson import Data.Bifunctor+import Data.ByteString (ByteString) import qualified Data.ByteString.Lazy as L import qualified Data.Csv as Csv import Data.Data import Data.HashMap.Strict (HashMap) import qualified Data.HashMap.Strict as HM+import Data.List import Data.Maybe import Data.String import Data.Text (Text)@@ -255,6 +258,12 @@ -------------------------------------------------------------------------------- -- Output +toString :: Dynamic -> String+toString = T.unpack . toText++toByteString :: Dynamic -> ByteString+toByteString = T.encodeUtf8 . toText+ -- | Convert to string if string, or else JSON encoding. toText :: Dynamic -> Text toText =@@ -397,30 +406,56 @@ -------------------------------------------------------------------------------- -- Web helpers --- | HTTP request for text content.-get :: Dynamic -> IO Text-get url = do+-- | HTTP GET request for text content.+get ::+ Dynamic+ -> [(Dynamic, Dynamic)] -- ^ Headers.+ -> IO Text+get url headers = do response <- httpBS- (addRequestHeader- "User-Agent"- "haskell-dynamic"- (fromString (T.unpack (toText url))))+ (foldl'+ (\r (k, v) ->+ addRequestHeader (fromString (toString k)) (toByteString v) r)+ (addRequestHeader+ "User-Agent"+ "haskell-dynamic"+ (fromString (toString url)))+ headers) pure (T.decodeUtf8 (getResponseBody response)) --- | HTTP request for text content.-getJson :: Dynamic -> IO Dynamic-getJson = fmap fromJson . get+-- | HTTP GET request for text content.+getJson ::+ Dynamic+ -> [(Dynamic, Dynamic)] -- ^ Headers.+ -> IO Dynamic+getJson url headers = fmap fromJson (get url headers) --- | HTTP request for text content.-postJson :: Dynamic -> Dynamic -> IO Text-postJson url body = do+-- | HTTP POST request for text content.+post ::+ Dynamic -- ^ URL.+ -> [(Dynamic, Dynamic)] -- ^ Headers.+ -> Dynamic -- ^ Body.+ -> IO Text+post url headers body = do response <- httpBS- (addRequestHeader- "User-Agent"- "haskell-dynamic"- (setRequestMethod- "POST"- (setRequestBodyJSON body (fromString (T.unpack (toText url))))))+ (foldl'+ (\r (k, v) ->+ addRequestHeader (fromString (toString k)) (toByteString v) r)+ (addRequestHeader+ "User-Agent"+ "haskell-dynamic"+ (setRequestMethod+ "POST"+ (setRequestBodyJSON body (fromString (toString url)))))+ headers) pure (T.decodeUtf8 (getResponseBody response))++-- | HTTP POST request for JSON content.+postJson ::+ Dynamic -- ^ URL.+ -> [(Dynamic, Dynamic)] -- ^ Headers.+ -> Dynamic -- ^ Body.+ -> IO Dynamic+postJson url headers body = fmap fromJson (post url headers body)