@@ -21,6 +21,8 @@ module Web.HttpApiData (
21 readEitherUrlPiece,
21 readEitherUrlPiece,
24+import Control.Applicative
24import Data.Monoid
26import Data.Monoid
25import Data.ByteString (ByteString)
27import Data.ByteString (ByteString)
@@ -141,11 +143,18 @@ instance ToHttpApiData Text where toUrlPiece = id
141instance ToHttpApiData L.Text where toUrlPiece = L.toStrict
143instance ToHttpApiData L.Text where toUrlPiece = L.toStrict
142instance ToHttpApiData Day where toUrlPiece = showUrlPiece
144instance ToHttpApiData Day where toUrlPiece = showUrlPiece
147+-- >>> toUrlPiece (Just "Hello")
149+instance ToHttpApiData a => ToHttpApiData (Maybe a) where
150+ toUrlPiece (Just x) = "Just " <> toUrlPiece x
151+ toUrlPiece Nothing = "Nothing"
145-- >>> parseUrlPiece "_" :: Either Text ()
154-- >>> parseUrlPiece "_" :: Either Text ()
146-- Right ()
155-- Right ()
147instance FromHttpApiData () where
156instance FromHttpApiData () where
148− parseUrlPiece "_" = pure ()
157+ parseUrlPiece "_" = return ()
149 parseUrlPiece s = defaultParseError s
158 parseUrlPiece s = defaultParseError s
151instance FromHttpApiData Bool where parseUrlPiece = readEitherUrlPiece
160instance FromHttpApiData Bool where parseUrlPiece = readEitherUrlPiece
@@ -167,6 +176,16 @@ instance FromHttpApiData Text where parseUrlPiece = Right
167instance FromHttpApiData L.Text where parseUrlPiece = Right . L.fromStrict
176instance FromHttpApiData L.Text where parseUrlPiece = Right . L.fromStrict
168instance FromHttpApiData Day where parseUrlPiece = readEitherUrlPiece
177instance FromHttpApiData Day where parseUrlPiece = readEitherUrlPiece
180+-- >>> parseUrlPiece "Just 123" :: Either Text Int
182+instance FromHttpApiData a => FromHttpApiData (Maybe a) where
183+ parseUrlPiece "Nothing" = return Nothing
185+ case T.stripPrefix "Just " s of
186+ Nothing -> defaultParseError s
187+ Just x -> Just <$> parseUrlPiece x
170-- $examples
189-- $examples
172-- Booleans:
191-- Booleans: