packages feed

http-api-data 0.3.8.1 → 0.3.9

raw patch · 6 files changed

+128/−86 lines, 6 filesdep +cookiedep −uri-bytestringdep ~HUnitdep ~QuickCheckdep ~attoparsec

Dependencies added: cookie

Dependencies removed: uri-bytestring

Dependency ranges changed: HUnit, QuickCheck, attoparsec, base, containers, doctest, hashable, hspec, http-types, quickcheck-instances, semigroups, text, text-show, time-locale-compat, unordered-containers, uuid-types

Files

CHANGELOG.md view
@@ -1,3 +1,12 @@+0.3.9+---++* GHC-8.6 support+* Remove dependency on `uri-bytestring` and use functions from `http-types` instead+  (see [#75](https://github.com/fizruk/http-api-data/pull/78))+* Add support for `Cookie`+  (see [#74](https://github.com/fizruk/http-api-data/pull/74))+ 0.3.8.1 --- 
http-api-data.cabal view
@@ -1,19 +1,22 @@+cabal-version:   >= 1.10 name:            http-api-data-version:         0.3.8.1-license:         BSD3-license-file:    LICENSE-author:          Nickolay Kudasov <nickolay.kudasov@gmail.com>-maintainer:      Nickolay Kudasov <nickolay.kudasov@gmail.com>+version:         0.3.9+ synopsis:        Converting to/from HTTP API data like URL pieces, headers and query parameters.+category:        Web description:   This package defines typeclasses used for converting Haskell data types to and from HTTP API data.   .   Please see README.md++license:         BSD3+license-file:    LICENSE+author:          Nickolay Kudasov <nickolay.kudasov@gmail.com>+maintainer:      Nickolay Kudasov <nickolay.kudasov@gmail.com> homepage:        http://github.com/fizruk/http-api-data-category:        Web stability:       unstable-cabal-version:   >= 1.10 build-type:      Custom+ extra-source-files:   include/overlapping-compat.h   test/*.hs@@ -24,12 +27,13 @@   GHC==7.10.3,   GHC==8.0.2,   GHC==8.2.2,-  GHC==8.4.1+  GHC==8.4.3,+  GHC==8.6.1  custom-setup   setup-depends:-    base >= 4.7 && <4.12,-    Cabal >= 1.18 && <2.3,+    base,+    Cabal,     cabal-doctest >=1.0.6 && <1.1  flag use-text-show@@ -40,24 +44,32 @@ library     hs-source-dirs: src/     include-dirs:   include/-    build-depends:   base                  >= 4.7      && < 4.12-                   , attoparsec            >= 0.13.0.1 && < 0.14-                   , attoparsec-iso8601    >= 1.0.0.0  && < 1.1++    -- GHC bundled+    build-depends:   base                  >= 4.7      && < 4.13                    , bytestring            >= 0.10.4.0 && < 0.11-                   , containers            >= 0.5.5.1  && < 0.6-                   , hashable              >= 1.1.2.4  && < 1.3-                   , http-types            >= 0.8.6    && < 0.13-                   , text                  >= 1.1.1.3  && < 1.3+                   , containers            >= 0.5.5.1  && < 0.7+                   , text                  >= 1.2.3.0  && < 1.3                    , time                  >= 1.4.2    && < 1.9-                   , time-locale-compat    >= 0.1.1.0  && < 0.2-                   , unordered-containers  >= 0.2.6.0  && < 0.3-                   , uri-bytestring        >= 0.1.7    && < 0.4-                   , uuid-types            >= 1.0.2    && <1.1++    -- other-dependencies+    build-depends:+                     attoparsec            >= 0.13.2.2 && < 0.14+                   , attoparsec-iso8601    >= 1.0.0.0  && < 1.1+                   , cookie                >= 0.4.3    && < 0.4.5+                   , hashable              >= 1.2.7.0  && < 1.3+                   , http-types            >= 0.12.1   && < 0.13+                   , time-locale-compat    >= 0.1.1.5  && < 0.2+                   , unordered-containers  >= 0.2.9.0  && < 0.3+                   , uuid-types            >= 1.0.3    && <1.1+     if !impl(ghc >= 8.0)-      build-depends: semigroups            >= 0.16     && < 0.19+      build-depends: semigroups            >= 0.18.5   && < 0.19+     if flag(use-text-show)       cpp-options: -DUSE_TEXT_SHOW-      build-depends: text-show        >= 2+      build-depends: text-show        >= 3.7.4 && <3.8+     exposed-modules:       Web.HttpApiData       Web.FormUrlEncoded@@ -76,13 +88,11 @@     hs-source-dirs: test     ghc-options:   -Wall     default-language: Haskell2010-    build-tool-depends: hspec-discover:hspec-discover >= 2.4.7 && <2.5-    build-depends:   HUnit-                   , hspec >= 2.4.7-                   , base+    build-tool-depends: hspec-discover:hspec-discover >= 2.5.5 && <2.6+    -- inherited  depndencies+    build-depends:+                     base                    , bytestring-                   , QuickCheck >=2.9-                   , quickcheck-instances >= 0.3.12                    , unordered-containers                    , http-api-data                    , text@@ -90,12 +100,17 @@                    , bytestring                    , uuid-types +    build-depends:   HUnit                >= 1.6.0.0 && <1.7+                   , hspec                >= 2.5.5   && <2.6+                   , QuickCheck           >= 2.11.3  && <2.13+                   , quickcheck-instances >= 0.3.19  && <0.4+ test-suite doctests   ghc-options:      -Wall   build-depends:     base,     directory >= 1.0,-    doctest >= 0.11 && <0.16,+    doctest >= 0.16.0 && <0.17,     filepath   default-language: Haskell2010   hs-source-dirs:   test
src/Web/FormUrlEncoded.hs view
@@ -47,5 +47,5 @@   urlDecodeParams, ) where -import Web.Internal.FormUrlEncoded+import           Web.Internal.FormUrlEncoded 
src/Web/HttpApiData.hs view
@@ -43,7 +43,7 @@   readTextData, ) where -import Web.Internal.HttpApiData+import           Web.Internal.HttpApiData  -- $setup --
src/Web/Internal/FormUrlEncoded.hs view
@@ -1,5 +1,5 @@-{-# LANGUAGE ConstraintKinds            #-} {-# LANGUAGE CPP                        #-}+{-# LANGUAGE ConstraintKinds            #-} {-# LANGUAGE DataKinds                  #-} {-# LANGUAGE DefaultSignatures          #-} {-# LANGUAGE DeriveGeneric              #-}@@ -18,14 +18,14 @@ module Web.Internal.FormUrlEncoded where  #if __GLASGOW_HASKELL__ < 710-import Control.Applicative-import Data.Traversable+import           Control.Applicative+import           Data.Traversable #endif   import           Control.Arrow              ((***)) import           Control.Monad              ((<=<))-import           Data.ByteString.Builder    (toLazyByteString, shortByteString)+import           Data.ByteString.Builder    (shortByteString, toLazyByteString) import qualified Data.ByteString.Lazy       as BSL import qualified Data.ByteString.Lazy.Char8 as BSL8 import qualified Data.Foldable              as F@@ -39,30 +39,30 @@ import           Data.Map                   (Map) import qualified Data.Map                   as Map import           Data.Monoid-import qualified Data.Semigroup             as Semi import           Data.Ord                   (comparing)+import qualified Data.Semigroup             as Semi  import           Data.Text                  (Text) import qualified Data.Text                  as Text-import qualified Data.Text.Lazy             as Lazy import           Data.Text.Encoding         as Text import           Data.Text.Encoding.Error   (lenientDecode)+import qualified Data.Text.Lazy             as Lazy -import           Data.Time import           Data.Proxy+import           Data.Time import           Data.Word  #if MIN_VERSION_base(4,8,0)-import Data.Void-import Numeric.Natural+import           Data.Void+import           Numeric.Natural #endif -import           GHC.Exts                   (IsList (..), Constraint)+import           GHC.Exts                   (Constraint, IsList (..)) import           GHC.Generics import           GHC.TypeLits-import           URI.ByteString             (urlEncodeQuery, urlDecodeQuery)+import           Network.HTTP.Types.URI     (urlDecode, urlEncodeBuilder) -import Web.Internal.HttpApiData+import           Web.Internal.HttpApiData  -- $setup -- >>> :set -XDeriveGeneric@@ -543,10 +543,10 @@ urlEncodeParams :: [(Text, Text)] -> BSL.ByteString urlEncodeParams = toLazyByteString . mconcat . intersperse (shortByteString "&") . map encodePair   where-    escape = urlEncodeQuery . Text.encodeUtf8+    escape = urlEncodeBuilder True . Text.encodeUtf8      encodePair (k, "") = escape k-    encodePair (k, v) = escape k <> shortByteString "=" <> escape v+    encodePair (k, v)  = escape k <> shortByteString "=" <> escape v  -- | Decode an @application/x-www-form-urlencoded@ 'BSL.ByteString' to a 'Form'. --@@ -590,7 +590,7 @@   where     pairs = map (BSL8.split '=') (BSL8.split '&' bs) -    unescape = Text.decodeUtf8With lenientDecode . urlDecodeQuery . BSL.toStrict+    unescape = Text.decodeUtf8With lenientDecode . urlDecode True . BSL.toStrict      parsePair p =       case map unescape p of
src/Web/Internal/HttpApiData.hs view
@@ -1,12 +1,12 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE DefaultSignatures #-}-{-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE DeriveFunctor #-}-{-# LANGUAGE DeriveFoldable #-}-{-# LANGUAGE DeriveTraversable #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE CPP                  #-}+{-# LANGUAGE DefaultSignatures    #-}+{-# LANGUAGE DeriveDataTypeable   #-}+{-# LANGUAGE DeriveFoldable       #-}+{-# LANGUAGE DeriveFunctor        #-}+{-# LANGUAGE DeriveTraversable    #-}+{-# LANGUAGE FlexibleInstances    #-}+{-# LANGUAGE OverloadedStrings    #-}+{-# LANGUAGE ScopedTypeVariables  #-} {-# LANGUAGE TypeSynonymInstances #-} -- | -- Convert Haskell values to and from HTTP API data@@ -14,54 +14,58 @@ module Web.Internal.HttpApiData where  #if __GLASGOW_HASKELL__ < 710-import Control.Applicative-import Data.Foldable (Foldable)-import Data.Traversable (Traversable(traverse))+import           Control.Applicative+import           Data.Foldable                (Foldable)+import           Data.Traversable             (Traversable (traverse)) #endif -import Control.Arrow ((&&&), left)-import Control.Monad ((<=<))+import           Control.Arrow                (left, (&&&))+import           Control.Monad                ((<=<)) -import Data.Monoid-import Data.ByteString (ByteString)-import qualified Data.ByteString as BS+import           Data.ByteString              (ByteString)+import qualified Data.ByteString              as BS+import           Data.Monoid -import Data.Int-import Data.Word+import           Data.Int+import           Data.Word -import Data.Text (Text)-import Data.Text.Encoding (encodeUtf8, decodeUtf8')-import Data.Text.Read (signed, decimal, rational, Reader)-import qualified Data.Text as T-import qualified Data.Text.Lazy as L+import           Data.Text                    (Text)+import qualified Data.Text                    as T+import           Data.Text.Encoding           (decodeUtf8', encodeUtf8)+import qualified Data.Text.Lazy               as L+import           Data.Text.Read               (Reader, decimal, rational,+                                               signed) -import Data.Time.Locale.Compat-import Data.Time-import Data.Version+import           Data.Time+import           Data.Time.Locale.Compat+import           Data.Version  #if MIN_VERSION_base(4,8,0)-import Data.Void-import Numeric.Natural+import           Data.Void+import           Numeric.Natural #endif -import Text.Read (readMaybe)-import Text.ParserCombinators.ReadP (readP_to_S)+import           Text.ParserCombinators.ReadP (readP_to_S)+import           Text.Read                    (readMaybe)  #if USE_TEXT_SHOW-import TextShow (TextShow, showt)+import           TextShow                     (TextShow, showt) #endif -import qualified Data.UUID.Types as UUID+import qualified Data.UUID.Types              as UUID -import Data.Typeable (Typeable)-import Data.Data (Data)-import qualified Data.ByteString.Builder as BS-import qualified Network.HTTP.Types as H+import qualified Data.ByteString.Builder      as BS+import           Data.Data                    (Data)+import           Data.Typeable                (Typeable)+import qualified Network.HTTP.Types           as H -import qualified Data.Attoparsec.Text as Atto-import qualified Data.Attoparsec.Time as Atto+import qualified Data.Attoparsec.Text         as Atto+import qualified Data.Attoparsec.Time         as Atto +import           Web.Cookie                   (SetCookie, parseSetCookie,+                                               renderSetCookie) + -- $setup -- >>> data BasicAuthToken = BasicAuthToken Text deriving (Show) -- >>> instance FromHttpApiData BasicAuthToken where parseHeader h = BasicAuthToken <$> parseHeaderWithPrefix "Basic " h; parseQueryParam p = BasicAuthToken <$> parseQueryParam p@@ -531,6 +535,14 @@   toUrlPiece (Right x) = "right " <> toUrlPiece x  -- |+-- >>> let Right c = parseUrlPiece "SESSID=r2t5uvjq435r4q7ib3vtdjq120" :: Either Text SetCookie+-- >>> toUrlPiece c+-- "\"SESSID=r2t5uvjq435r4q7ib3vtdjq120\""+instance ToHttpApiData SetCookie where+  toUrlPiece = showt . BS.toLazyByteString . renderSetCookie+  toEncodedUrlPiece = renderSetCookie++-- | -- >>> parseUrlPiece "_" :: Either Text () -- Right () instance FromHttpApiData () where@@ -664,6 +676,12 @@     parseHeader     = Right . LenientData . parseHeader     parseQueryParam = Right . LenientData . parseQueryParam +-- |+-- >>> parseUrlPiece "SESSID=r2t5uvjq435r4q7ib3vtdjq120" :: Either Text SetCookie+-- Right (SetCookie {setCookieName = "SESSID", setCookieValue = "r2t5uvjq435r4q7ib3vtdjq120", setCookiePath = Nothing, setCookieExpires = Nothing, setCookieMaxAge = Nothing, setCookieDomain = Nothing, setCookieHttpOnly = False, setCookieSecure = False, setCookieSameSite = Nothing})+instance FromHttpApiData SetCookie where+  parseUrlPiece = parseHeader  . encodeUtf8+  parseHeader   = Right . parseSetCookie ------------------------------------------------------------------------------- -- Attoparsec helpers -------------------------------------------------------------------------------