packages feed

http-api-data 0.4 → 0.4.1

raw patch · 7 files changed

+62/−49 lines, 7 filesdep +time-compatdep −timedep −time-locale-compatdep ~QuickCheckdep ~basedep ~base-compat

Dependencies added: time-compat

Dependencies removed: time, time-locale-compat

Dependency ranges changed: QuickCheck, base, base-compat, bytestring, hashable, hspec, http-types, quickcheck-instances, semigroups, text-show, unordered-containers, void

Files

CHANGELOG.md view
@@ -1,3 +1,8 @@+0.4.1+-----++* Use `time-compat` to provide instances for `DayOfWeek`.+ 0.4 --- @@ -18,7 +23,7 @@  * 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))+  (see [#75](https://github.com/fizruk/http-api-data/pull/75)) * Add support for `SetCookie`   (see [#74](https://github.com/fizruk/http-api-data/pull/74)) 
http-api-data.cabal view
@@ -1,6 +1,6 @@ cabal-version:   >= 1.10 name:            http-api-data-version:         0.4+version:         0.4.1  synopsis:        Converting to/from HTTP API data like URL pieces, headers and query parameters. category:        Web@@ -29,7 +29,8 @@   GHC==8.0.2,   GHC==8.2.2,   GHC==8.4.4,-  GHC==8.6.2+  GHC==8.6.5,+  GHC==8.8.1  custom-setup   setup-depends:@@ -51,32 +52,35 @@                    , bytestring            >= 0.10.4.0 && < 0.11                    , containers            >= 0.5.5.1  && < 0.7                    , text                  >= 1.2.3.0  && < 1.3-                   , time                  >= 1.4.2    && < 1.9 +    -- so Semigroup Builder exists+    if impl(ghc >= 8.0)+      build-depends: bytestring >= 0.10.8.1+     -- other-dependencies     build-depends:                      attoparsec            >= 0.13.2.2 && < 0.14                    , attoparsec-iso8601    >= 1.0.1.0  && < 1.1                    , base-compat           >= 0.10.5   && < 0.11                    , cookie                >= 0.4.3    && < 0.4.5-                   , hashable              >= 1.2.7.0  && < 1.3-                   , http-types            >= 0.12.2   && < 0.13+                   , hashable              >= 1.2.7.0  && < 1.4+                   , http-types            >= 0.12.3   && < 0.13                    , tagged                >= 0.8.5    && < 0.9-                   , time-locale-compat    >= 0.1.1.5  && < 0.2-                   , unordered-containers  >= 0.2.9.0  && < 0.3+                   , time-compat           >= 1.9.2    && < 1.10+                   , unordered-containers  >= 0.2.10.0  && < 0.3                    , uuid-types            >= 1.0.3    && <1.1      if !impl(ghc >= 7.10)       build-depends:         nats >= 1.1.2 && < 1.2,-        void >= 0.7.2 && < 0.8+        void >= 0.7.3 && < 0.8      if !impl(ghc >= 8.0)-      build-depends: semigroups            >= 0.18.5   && < 0.19+      build-depends: semigroups            >= 0.18.5   && < 0.20      if flag(use-text-show)       cpp-options: -DUSE_TEXT_SHOW-      build-depends: text-show        >= 3.7.4 && <3.8+      build-depends: text-show        >= 3.8.2 && <3.9      exposed-modules:       Web.HttpApiData@@ -96,7 +100,7 @@     hs-source-dirs: test     ghc-options:   -Wall     default-language: Haskell2010-    build-tool-depends: hspec-discover:hspec-discover >= 2.6.0 && <2.7+    build-tool-depends: hspec-discover:hspec-discover >= 2.7.1 && <2.8     -- inherited  depndencies     build-depends:                      base@@ -106,14 +110,14 @@                    , http-api-data                    , nats                    , text-                   , time+                   , time-compat                    , unordered-containers                    , uuid-types      build-depends:   HUnit                >= 1.6.0.0 && <1.7-                   , hspec                >= 2.6.0   && <2.7-                   , QuickCheck           >= 2.11.3  && <2.13-                   , quickcheck-instances >= 0.3.19  && <0.4+                   , hspec                >= 2.7.1   && <2.8+                   , QuickCheck           >= 2.13.1  && <2.14+                   , quickcheck-instances >= 0.3.21  && <0.4  test-suite doctests   ghc-options:      -Wall
src/Web/HttpApiData.hs view
@@ -49,10 +49,9 @@ -- -- >>> :set -XOverloadedStrings -- >>> import Control.Applicative--- >>> import Data.Time+-- >>> import Data.Time.Compat -- >>> import Data.Int -- >>> import Data.Text (Text)--- >>> import Data.Time (Day) -- >>> import Data.Version  -- $examples
src/Web/Internal/FormUrlEncoded.hs view
@@ -48,7 +48,7 @@ import qualified Data.Text.Encoding         as Text import           Data.Text.Encoding.Error   (lenientDecode) import qualified Data.Text.Lazy             as Lazy-import           Data.Time                  (Day, LocalTime, NominalDiffTime,+import           Data.Time.Compat           (Day, LocalTime, NominalDiffTime,                                              UTCTime, ZonedTime) import           Data.Void                  (Void) import           Data.Word                  (Word16, Word32, Word64, Word8)
src/Web/Internal/HttpApiData.hs view
@@ -28,6 +28,7 @@ import           Data.Data                    (Data) import qualified Data.Fixed                   as F import           Data.Int                     (Int16, Int32, Int64, Int8)+import qualified Data.Map                     as Map import           Data.Monoid                  (All (..), Any (..), Dual (..),                                                First (..), Last (..),                                                Product (..), Sum (..))@@ -42,10 +43,13 @@ import qualified Data.Text.Lazy               as L import           Data.Text.Read               (Reader, decimal, rational,                                                signed)-import           Data.Time                    (Day, FormatTime, LocalTime,+import           Data.Time.Compat             (Day, FormatTime, LocalTime,                                                NominalDiffTime, TimeOfDay,-                                               UTCTime, ZonedTime, formatTime)-import           Data.Time.Locale.Compat      (defaultTimeLocale,+                                               UTCTime, ZonedTime, formatTime,+                                               DayOfWeek (..),+                                               nominalDiffTimeToSeconds,+                                               secondsToNominalDiffTime)+import           Data.Time.Format.Compat      (defaultTimeLocale,                                                iso8601DateFormat) import           Data.Typeable                (Typeable) import qualified Data.UUID.Types              as UUID@@ -60,10 +64,6 @@ import           Web.Cookie                   (SetCookie, parseSetCookie,                                                renderSetCookie) -#if MIN_VERSION_time(1,9,1)-import           Data.Time                    (nominalDiffTimeToSeconds,-                                               secondsToNominalDiffTime)-#endif  #if USE_TEXT_SHOW import           TextShow                     (TextShow, showt)@@ -75,7 +75,7 @@ -- $setup -- >>> data BasicAuthToken = BasicAuthToken Text deriving (Show) -- >>> instance FromHttpApiData BasicAuthToken where parseHeader h = BasicAuthToken <$> parseHeaderWithPrefix "Basic " h; parseQueryParam p = BasicAuthToken <$> parseQueryParam p--- >>> import Data.Time+-- >>> import Data.Time.Compat -- >>> import Data.Version  -- | Convert value to HTTP API data.@@ -495,28 +495,23 @@   toUrlPiece = timeToUrlPiece "%H:%M:%S%QZ"   toEncodedUrlPiece = unsafeToEncodedUrlPiece --- The CPP in both this function and the function after it are to avoid--- exporting @nominalDiffTimeToSeconds@ and @secondsToNominalDiffTime@,--- since these names are already used by @Data.Time@ from the @time@ library--- starting in version @1.9.1@.-nominalDiffTimeToSecs :: NominalDiffTime -> F.Pico-nominalDiffTimeToSecs =-#if !MIN_VERSION_time(1,9,1)-    realToFrac-#else-    nominalDiffTimeToSeconds-#endif+-- |+-- >>> toUrlPiece Monday+-- "monday"+instance ToHttpApiData DayOfWeek where+  toUrlPiece Monday    = "monday"+  toUrlPiece Tuesday   = "tuesday"+  toUrlPiece Wednesday = "wednesday"+  toUrlPiece Thursday  = "thursday"+  toUrlPiece Friday    = "friday"+  toUrlPiece Saturday  = "saturday"+  toUrlPiece Sunday    = "sunday" -secsToNominalDiffTime :: F.Pico -> NominalDiffTime-secsToNominalDiffTime =-#if !MIN_VERSION_time(1,9,1)-    realToFrac-#else-    secondsToNominalDiffTime-#endif+  toEncodedUrlPiece = unsafeToEncodedUrlPiece + instance ToHttpApiData NominalDiffTime where-  toUrlPiece = toUrlPiece . nominalDiffTimeToSecs+  toUrlPiece = toUrlPiece . nominalDiffTimeToSeconds   toEncodedUrlPiece = unsafeToEncodedUrlPiece  instance ToHttpApiData String   where toUrlPiece = T.pack@@ -686,7 +681,16 @@ -- Right 2015-10-03 00:14:24 UTC instance FromHttpApiData UTCTime   where parseUrlPiece = runAtto Atto.utcTime -instance FromHttpApiData NominalDiffTime where parseUrlPiece = fmap secsToNominalDiffTime . parseUrlPiece+instance FromHttpApiData DayOfWeek where+  parseUrlPiece t = case Map.lookup (T.toLower t) m of+      Just dow -> Right dow+      Nothing  -> Left $ "Incorrect DayOfWeek: " <> T.take 10 t+    where+      m :: Map.Map Text DayOfWeek+      m = Map.fromList [ (toUrlPiece dow, dow) | dow <- [Monday .. Sunday] ]+++instance FromHttpApiData NominalDiffTime where parseUrlPiece = fmap secondsToNominalDiffTime . parseUrlPiece  instance FromHttpApiData All where parseUrlPiece = coerce (parseUrlPiece :: Text -> Either Text Bool) instance FromHttpApiData Any where parseUrlPiece = coerce (parseUrlPiece :: Text -> Either Text Bool)
test/Web/Internal/HttpApiDataSpec.hs view
@@ -13,7 +13,7 @@ import qualified Data.Text                  as T import qualified Data.Text.Encoding         as TE import qualified Data.Text.Lazy             as L-import           Data.Time+import           Data.Time.Compat import qualified Data.UUID.Types            as UUID import           Data.Version import           Data.Word@@ -86,6 +86,7 @@     checkUrlPiece  (Proxy :: Proxy ZonedTime) "ZonedTime"     checkUrlPiece  (Proxy :: Proxy UTCTime)   "UTCTime"     checkUrlPiece  (Proxy :: Proxy NominalDiffTime) "NominalDiffTime"+    checkUrlPiece  (Proxy :: Proxy DayOfWeek) "DayOfWeek"     checkUrlPiece  (Proxy :: Proxy Version)   "Version"     checkUrlPiece  (Proxy :: Proxy UUID.UUID) "UUID"     checkUrlPiece' setCookieGen               "Cookie"
test/Web/Internal/TestInstances.hs view
@@ -12,7 +12,7 @@ import           Data.Char import qualified Data.HashMap.Strict  as HashMap import qualified Data.Text            as T-import           Data.Time+import           Data.Time.Compat import           GHC.Exts             (fromList) import           GHC.Generics