@@ -1,4 +1,5 @@
1{-# LANGUAGE DefaultSignatures #-}
1{-# LANGUAGE DefaultSignatures #-}
2+{-# LANGUAGE FlexibleInstances #-}
2{-# LANGUAGE OverloadedStrings #-}
3{-# LANGUAGE OverloadedStrings #-}
3module Web.HttpApiData (
4module Web.HttpApiData (
4 ToHttpApiData (..),
5 ToHttpApiData (..),
@@ -12,6 +13,9 @@ module Web.HttpApiData (
12import Data.Monoid
13import Data.Monoid
13import Data.ByteString (ByteString)
14import Data.ByteString (ByteString)
15import Data.Text (Text)
19import Data.Text (Text)
16import Data.Text.Encoding (encodeUtf8, decodeUtf8)
20import Data.Text.Encoding (encodeUtf8, decodeUtf8)
17import qualified Data.Text as Text
21import qualified Data.Text as Text
@@ -65,3 +69,37 @@ readMaybeUrlPiece = readMaybe . Text.unpack
65readEitherUrlPiece :: Read a => Text -> Either Text a
69readEitherUrlPiece :: Read a => Text -> Either Text a
66readEitherUrlPiece = parseMaybeUrlPiece readMaybeUrlPiece
70readEitherUrlPiece = parseMaybeUrlPiece readMaybeUrlPiece
72+instance ToHttpApiData Bool where toUrlPiece = showUrlPiece
73+instance ToHttpApiData Double where toUrlPiece = showUrlPiece
74+instance ToHttpApiData Float where toUrlPiece = showUrlPiece
75+instance ToHttpApiData Int where toUrlPiece = showUrlPiece
76+instance ToHttpApiData Int8 where toUrlPiece = showUrlPiece
77+instance ToHttpApiData Int16 where toUrlPiece = showUrlPiece
78+instance ToHttpApiData Int32 where toUrlPiece = showUrlPiece
79+instance ToHttpApiData Int64 where toUrlPiece = showUrlPiece
80+instance ToHttpApiData Integer where toUrlPiece = showUrlPiece
81+instance ToHttpApiData Word where toUrlPiece = showUrlPiece
82+instance ToHttpApiData Word8 where toUrlPiece = showUrlPiece
83+instance ToHttpApiData Word16 where toUrlPiece = showUrlPiece
84+instance ToHttpApiData Word32 where toUrlPiece = showUrlPiece
85+instance ToHttpApiData Word64 where toUrlPiece = showUrlPiece
86+instance ToHttpApiData [Char] where toUrlPiece = Text.pack
87+instance ToHttpApiData Text where toUrlPiece = id
89+instance FromHttpApiData Bool where parseUrlPiece = readEitherUrlPiece
90+instance FromHttpApiData Double where parseUrlPiece = readEitherUrlPiece
91+instance FromHttpApiData Float where parseUrlPiece = readEitherUrlPiece
92+instance FromHttpApiData Int where parseUrlPiece = readEitherUrlPiece
93+instance FromHttpApiData Int8 where parseUrlPiece = readEitherUrlPiece
94+instance FromHttpApiData Int16 where parseUrlPiece = readEitherUrlPiece
95+instance FromHttpApiData Int32 where parseUrlPiece = readEitherUrlPiece
96+instance FromHttpApiData Int64 where parseUrlPiece = readEitherUrlPiece
97+instance FromHttpApiData Integer where parseUrlPiece = readEitherUrlPiece
98+instance FromHttpApiData Word where parseUrlPiece = readEitherUrlPiece
99+instance FromHttpApiData Word8 where parseUrlPiece = readEitherUrlPiece
100+instance FromHttpApiData Word16 where parseUrlPiece = readEitherUrlPiece
101+instance FromHttpApiData Word32 where parseUrlPiece = readEitherUrlPiece
102+instance FromHttpApiData Word64 where parseUrlPiece = readEitherUrlPiece
103+instance FromHttpApiData [Char] where parseUrlPiece = Right . Text.unpack
104+instance FromHttpApiData Text where parseUrlPiece = Right