@@ -38,6 +38,9 @@ import Text.ParserCombinators.ReadP (readP_to_S)
38import TextShow (TextShow, showt)
38import TextShow (TextShow, showt)
42+-- >>> import Data.Time
41-- | Convert value to HTTP API data.
44-- | Convert value to HTTP API data.
42class ToHttpApiData a where
45class ToHttpApiData a where
43 {-# MINIMAL toUrlPiece | toQueryParam #-}
46 {-# MINIMAL toUrlPiece | toQueryParam #-}
@@ -267,6 +270,10 @@ instance ToHttpApiData Word8 where toUrlPiece = showt
267instance ToHttpApiData Word16 where toUrlPiece = showt
270instance ToHttpApiData Word16 where toUrlPiece = showt
268instance ToHttpApiData Word32 where toUrlPiece = showt
271instance ToHttpApiData Word32 where toUrlPiece = showt
269instance ToHttpApiData Word64 where toUrlPiece = showt
272instance ToHttpApiData Word64 where toUrlPiece = showt
275+-- >>> toUrlPiece (fromGregorian 2015 10 03)
270instance ToHttpApiData Day where toUrlPiece = T.pack . show
277instance ToHttpApiData Day where toUrlPiece = T.pack . show
272instance ToHttpApiData String where toUrlPiece = T.pack
279instance ToHttpApiData String where toUrlPiece = T.pack
@@ -321,6 +328,7 @@ instance FromHttpApiData Version where
321 _ -> defaultParseError s
328 _ -> defaultParseError s
323#if MIN_VERSION_base(4,8,0)
330#if MIN_VERSION_base(4,8,0)
331+-- | Parsing a @'Void'@ value is always an error, considering @'Void'@ as a data type with no constructors.
324instance FromHttpApiData Void where
332instance FromHttpApiData Void where
325 parseUrlPiece _ = Left "Void cannot be parsed!"
333 parseUrlPiece _ = Left "Void cannot be parsed!"
@@ -343,6 +351,10 @@ instance FromHttpApiData Word64 where parseUrlPiece = parseBounded decimal
343instance FromHttpApiData String where parseUrlPiece = Right . T.unpack
351instance FromHttpApiData String where parseUrlPiece = Right . T.unpack
344instance FromHttpApiData Text where parseUrlPiece = Right
352instance FromHttpApiData Text where parseUrlPiece = Right
345instance FromHttpApiData L.Text where parseUrlPiece = Right . L.fromStrict
353instance FromHttpApiData L.Text where parseUrlPiece = Right . L.fromStrict
356+-- >>> toGregorian <$> parseUrlPiece "2016-12-01"
346instance FromHttpApiData Day where parseUrlPiece = readEitherTextData
358instance FromHttpApiData Day where parseUrlPiece = readEitherTextData
348instance FromHttpApiData All where parseUrlPiece = fmap All . parseUrlPiece
360instance FromHttpApiData All where parseUrlPiece = fmap All . parseUrlPiece