packages feed

http-api-data 0.2.1 → 0.2.2

raw patch · 4 files changed

+73/−1 lines, 4 filesdep +time-locale-compat

Dependencies added: time-locale-compat

Files

CHANGELOG.md view
@@ -1,3 +1,8 @@+0.2.2+---++* Add instances for more `time` types: `LocalTime`, `ZonedTime`, `UTCTime` and `NominalDiffTime`+ 0.2.1 --- 
Web/HttpApiData/Internal.hs view
@@ -28,6 +28,7 @@ import qualified Data.Text as T import qualified Data.Text.Lazy as L +import Data.Time.Locale.Compat import Data.Time import Data.Version @@ -364,6 +365,26 @@ -- "2015-10-03" instance ToHttpApiData Day      where toUrlPiece = T.pack . show +timeToUrlPiece :: FormatTime t => String -> t -> Text+timeToUrlPiece fmt = T.pack . formatTime defaultTimeLocale (iso8601DateFormat (Just fmt))++-- |+-- >>> toUrlPiece $ LocalTime (fromGregorian 2015 10 03) (TimeOfDay 14 55 01)+-- "2015-10-03T14:55:01"+instance ToHttpApiData LocalTime where toUrlPiece = timeToUrlPiece "%H:%M:%S"++-- |+-- >>> toUrlPiece $ ZonedTime (LocalTime (fromGregorian 2015 10 03) (TimeOfDay 14 55 01)) utc+-- "2015-10-03T14:55:01+0000"+instance ToHttpApiData ZonedTime where toUrlPiece = timeToUrlPiece "%H:%M:%S%z"++-- |+-- >>> toUrlPiece $ UTCTime (fromGregorian 2015 10 03) 864+-- "2015-10-03T00:14:24Z"+instance ToHttpApiData UTCTime   where toUrlPiece = timeToUrlPiece "%H:%M:%SZ"++instance ToHttpApiData NominalDiffTime where toUrlPiece = toUrlPiece . (floor :: NominalDiffTime -> Integer)+ instance ToHttpApiData String   where toUrlPiece = T.pack instance ToHttpApiData Text     where toUrlPiece = id instance ToHttpApiData L.Text   where toUrlPiece = L.toStrict@@ -444,6 +465,28 @@ -- >>> toGregorian <$> parseUrlPiece "2016-12-01" -- Right (2016,12,1) instance FromHttpApiData Day      where parseUrlPiece = readTextData++timeParseUrlPiece :: ParseTime t => String -> Text -> Either Text t+timeParseUrlPiece fmt = parseMaybeTextData (timeParseUrlPieceMaybe . T.unpack)+  where+    timeParseUrlPieceMaybe = parseTime defaultTimeLocale (iso8601DateFormat (Just fmt))++-- |+-- >>> parseUrlPiece "2015-10-03T14:55:01" :: Either Text LocalTime+-- Right 2015-10-03 14:55:01+instance FromHttpApiData LocalTime where parseUrlPiece = timeParseUrlPiece "%H:%M:%S"++-- |+-- >>> parseUrlPiece "2015-10-03T14:55:01+0000" :: Either Text ZonedTime+-- Right 2015-10-03 14:55:01 +0000+instance FromHttpApiData ZonedTime where parseUrlPiece = timeParseUrlPiece "%H:%M:%S%z"++-- |+-- >>> parseUrlPiece "2015-10-03T00:14:24Z" :: Either Text UTCTime+-- Right 2015-10-03 00:14:24 UTC+instance FromHttpApiData UTCTime   where parseUrlPiece = timeParseUrlPiece "%H:%M:%SZ"++instance FromHttpApiData NominalDiffTime where parseUrlPiece = fmap fromInteger . parseUrlPiece  instance FromHttpApiData All where parseUrlPiece = fmap All . parseUrlPiece instance FromHttpApiData Any where parseUrlPiece = fmap Any . parseUrlPiece
http-api-data.cabal view
@@ -1,5 +1,5 @@ name:            http-api-data-version:         0.2.1+version:         0.2.2 license:         BSD3 license-file:    LICENSE author:          Nickolay Kudasov <nickolay.kudasov@gmail.com>@@ -25,6 +25,7 @@                    , text             >= 0.5                    , bytestring                    , time+                   , time-locale-compat     if flag(use-text-show)       cpp-options: -DUSE_TEXT_SHOW       build-depends: text-show        >= 2
test/Spec.hs view
@@ -27,6 +27,25 @@ instance Arbitrary Day where   arbitrary = liftA3 fromGregorian (fmap abs arbitrary) arbitrary arbitrary +instance Arbitrary LocalTime where+  arbitrary = LocalTime+    <$> arbitrary+    <*> liftA3 TimeOfDay (choose (0, 23)) (choose (0, 59)) (fromInteger <$> choose (0, 60))++instance Eq ZonedTime where+  ZonedTime t (TimeZone x _ _) == ZonedTime t' (TimeZone y _ _) = t == t' && x == y++instance Arbitrary ZonedTime where+  arbitrary = ZonedTime+    <$> arbitrary+    <*> liftA3 TimeZone arbitrary arbitrary (vectorOf 3 (elements ['A'..'Z']))++instance Arbitrary UTCTime where+  arbitrary = UTCTime <$> arbitrary <*> fmap fromInteger (choose (0, 86400))++instance Arbitrary NominalDiffTime where+  arbitrary = fromInteger <$> arbitrary+ instance Arbitrary Version where   arbitrary = (version . map abs) <$> nonempty     where@@ -89,6 +108,10 @@     checkUrlPiece  (Proxy :: Proxy T.Text)    "Text.Strict"     checkUrlPiece  (Proxy :: Proxy L.Text)    "Text.Lazy"     checkUrlPiece  (Proxy :: Proxy Day)       "Day"+    checkUrlPiece  (Proxy :: Proxy LocalTime) "LocalTime"+    checkUrlPiece  (Proxy :: Proxy ZonedTime) "ZonedTime"+    checkUrlPiece  (Proxy :: Proxy UTCTime)   "UTCTime"+    checkUrlPiece  (Proxy :: Proxy NominalDiffTime) "NominalDiffTime"     checkUrlPiece  (Proxy :: Proxy Version)   "Version"      checkUrlPiece  (Proxy :: Proxy (Maybe String))            "Maybe String"