git.iko.soy/typeable/servant
on master help sign in
Merge pull request #308 from haskell-servant/jkarni/linkHttpApiData

Add ToHttpApiData instance for Link.

commit9cc344b95ba7366317ceb205648b93a0fde53fe7 authorJulian Arni <jkarni@gmail.com> dateSun 27 Dec 2015, 12:51 (11 years ago) parent4a03c6e8b3258a
1 file changed+11−6
servant/src/Servant/Utils/Links.hs+11−6
servant/src/Servant/Utils/Links.hs+11−6
@@ -103,7 +103,8 @@ module Servant.Utils.Links (
103103
104104import Data.List
105105import Data.Proxy ( Proxy(..) )
106−import Data.Text (Text, unpack)
106+import qualified Data.Text as Text
107+import qualified Data.ByteString.Char8 as BSC
107108#if !MIN_VERSION_base(4,8,0)
108109import Data.Monoid ( Monoid(..), (<>) )
109110#else
@@ -135,6 +136,10 @@ data Link = Link
135136 , _queryParams :: [Param Query]
136137 } deriving Show
137138
139+instance ToHttpApiData Link where
140+ toUrlPiece = Text.pack . show
141+ toHeader = BSC.pack . show
142+
138143-- | If either a or b produce an empty constraint, produce an empty constraint.
139144type family Or (a :: Constraint) (b :: Constraint) :: Constraint where
140145 -- This works because of:
@@ -193,8 +198,8 @@ data Query
193198
194199-- | Query param
195200data Param a
196− = SingleParam String Text
197− | ArrayElemParam String Text
201+ = SingleParam String Text.Text
202+ | ArrayElemParam String Text.Text
198203 | FlagParam String
199204 deriving Show
200205
@@ -218,8 +223,8 @@ linkURI (Link segments q_params) =
218223 "?" <> intercalate "&" (fmap makeQuery xs)
219224
220225 makeQuery :: Param Query -> String
221− makeQuery (ArrayElemParam k v) = escape k <> "[]=" <> escape (unpack v)
222− makeQuery (SingleParam k v) = escape k <> "=" <> escape (unpack v)
226+ makeQuery (ArrayElemParam k v) = escape k <> "[]=" <> escape (Text.unpack v)
227+ makeQuery (SingleParam k v) = escape k <> "=" <> escape (Text.unpack v)
223228 makeQuery (FlagParam k) = escape k
224229
225230escape :: String -> String
@@ -291,7 +296,7 @@ instance (ToHttpApiData v, HasLink sub)
291296 type MkLink (Capture sym v :> sub) = v -> MkLink sub
292297 toLink _ l v =
293298 toLink (Proxy :: Proxy sub) $
294− addSegment (escape . unpack $ toUrlPiece v) l
299+ addSegment (escape . Text.unpack $ toUrlPiece v) l
295300
296301instance HasLink sub => HasLink (Header sym a :> sub) where
297302 type MkLink (Header sym a :> sub) = MkLink sub