git.iko.soy/typeable/http-api-data
on master help sign in
Add To/FromHttpApiData instances for Day
e8e821fNickolay Kudasov
Web/HttpApiData.hs+4−1
@@ -24,6 +24,8 @@ import Data.Text.Read (signed, decimal, rational, Reader)
24import qualified Data.Text as Text
24import qualified Data.Text as Text
25import qualified Data.Text.Lazy as TL
25import qualified Data.Text.Lazy as TL
26
26
27+import Data.Time (Day)
28+
27import Text.Read (readMaybe)
29import Text.Read (readMaybe)
28
30
29-- | Convert value to HTTP API data.
31-- | Convert value to HTTP API data.
@@ -94,6 +96,7 @@ instance ToHttpApiData Word64 where toUrlPiece = showUrlPiece
94instance ToHttpApiData [Char] where toUrlPiece = Text.pack
96instance ToHttpApiData [Char] where toUrlPiece = Text.pack
95instance ToHttpApiData Text where toUrlPiece = id
97instance ToHttpApiData Text where toUrlPiece = id
96instance ToHttpApiData TL.Text where toUrlPiece = TL.toStrict
98instance ToHttpApiData TL.Text where toUrlPiece = TL.toStrict
99+instance ToHttpApiData Day where toUrlPiece = showUrlPiece
97
100
98instance FromHttpApiData Bool where parseUrlPiece = readEitherUrlPiece
101instance FromHttpApiData Bool where parseUrlPiece = readEitherUrlPiece
99instance FromHttpApiData Double where parseUrlPiece = runReader rational
102instance FromHttpApiData Double where parseUrlPiece = runReader rational
@@ -112,4 +115,4 @@ instance FromHttpApiData Word64 where parseUrlPiece = runReader decimal
112instance FromHttpApiData [Char] where parseUrlPiece = Right . Text.unpack
115instance FromHttpApiData [Char] where parseUrlPiece = Right . Text.unpack
113instance FromHttpApiData Text where parseUrlPiece = Right
116instance FromHttpApiData Text where parseUrlPiece = Right
114instance FromHttpApiData TL.Text where parseUrlPiece = Right . TL.fromStrict
117instance FromHttpApiData TL.Text where parseUrlPiece = Right . TL.fromStrict
115−
118+instance FromHttpApiData Day where parseUrlPiece = readEitherUrlPiece
Web/PathPieces.hs+1−7
@@ -40,18 +40,12 @@ instance PathPiece Word64
40instance PathPiece String
40instance PathPiece String
41instance PathPiece S.Text
41instance PathPiece S.Text
42instance PathPiece L.Text
42instance PathPiece L.Text
43+instance PathPiece Day
43
44
44instance PathPiece () where
45instance PathPiece () where
45 fromPathPiece t = if t == "_" then Just () else Nothing
46 fromPathPiece t = if t == "_" then Just () else Nothing
46 toPathPiece () = "_"
47 toPathPiece () = "_"
47
48
48−instance PathPiece Day where
49− fromPathPiece t =
50− case reads $ S.unpack t of
51− [(a,"")] -> Just a
52− _ -> Nothing
53− toPathPiece = S.pack . show
54−
55instance (PathPiece a) => PathPiece (Maybe a) where
49instance (PathPiece a) => PathPiece (Maybe a) where
56 fromPathPiece s = case S.stripPrefix "Just " s of
50 fromPathPiece s = case S.stripPrefix "Just " s of
57 Just r -> Just `fmap` fromPathPiece r
51 Just r -> Just `fmap` fromPathPiece r