git.iko.soy/typeable/servant
on master help sign in
Add ToHttpApiData instance for Link.
8b3258aJulian K. Arni
servant/src/Servant/Utils/Links.hs+11−6
@@ -103,7 +103,8 @@ module Servant.Utils.Links (
103
103
104import Data.List
104import Data.List
105import Data.Proxy ( Proxy(..) )
105import Data.Proxy ( Proxy(..) )
106−import Data.Text (Text, unpack)
106+import qualified Data.Text as Text
107+import qualified Data.ByteString.Char8 as BSC
107#if !MIN_VERSION_base(4,8,0)
108#if !MIN_VERSION_base(4,8,0)
108import Data.Monoid ( Monoid(..), (<>) )
109import Data.Monoid ( Monoid(..), (<>) )
109#else
110#else
@@ -135,6 +136,10 @@ data Link = Link
135 , _queryParams :: [Param Query]
136 , _queryParams :: [Param Query]
136 } deriving Show
137 } deriving Show
137
138
139+instance ToHttpApiData Link where
140+ toUrlPiece = Text.pack . show
141+ toHeader = BSC.pack . show
142+
138-- | If either a or b produce an empty constraint, produce an empty constraint.
143-- | If either a or b produce an empty constraint, produce an empty constraint.
139type family Or (a :: Constraint) (b :: Constraint) :: Constraint where
144type family Or (a :: Constraint) (b :: Constraint) :: Constraint where
140 -- This works because of:
145 -- This works because of:
@@ -193,8 +198,8 @@ data Query
193
198
194-- | Query param
199-- | Query param
195data Param a
200data Param a
196− = SingleParam String Text
201+ = SingleParam String Text.Text
197− | ArrayElemParam String Text
202+ | ArrayElemParam String Text.Text
198 | FlagParam String
203 | FlagParam String
199 deriving Show
204 deriving Show
200
205
@@ -218,8 +223,8 @@ linkURI (Link segments q_params) =
218 "?" <> intercalate "&" (fmap makeQuery xs)
223 "?" <> intercalate "&" (fmap makeQuery xs)
219
224
220 makeQuery :: Param Query -> String
225 makeQuery :: Param Query -> String
221− makeQuery (ArrayElemParam k v) = escape k <> "[]=" <> escape (unpack v)
226+ makeQuery (ArrayElemParam k v) = escape k <> "[]=" <> escape (Text.unpack v)
222− makeQuery (SingleParam k v) = escape k <> "=" <> escape (unpack v)
227+ makeQuery (SingleParam k v) = escape k <> "=" <> escape (Text.unpack v)
223 makeQuery (FlagParam k) = escape k
228 makeQuery (FlagParam k) = escape k
224
229
225escape :: String -> String
230escape :: String -> String
@@ -291,7 +296,7 @@ instance (ToHttpApiData v, HasLink sub)
291 type MkLink (Capture sym v :> sub) = v -> MkLink sub
296 type MkLink (Capture sym v :> sub) = v -> MkLink sub
292 toLink _ l v =
297 toLink _ l v =
293 toLink (Proxy :: Proxy sub) $
298 toLink (Proxy :: Proxy sub) $
294− addSegment (escape . unpack $ toUrlPiece v) l
299+ addSegment (escape . Text.unpack $ toUrlPiece v) l
295
300
296instance HasLink sub => HasLink (Header sym a :> sub) where
301instance HasLink sub => HasLink (Header sym a :> sub) where
297 type MkLink (Header sym a :> sub) = MkLink sub
302 type MkLink (Header sym a :> sub) = MkLink sub