@@ -107,7 +107,7 @@ import Prelude.Compat
108import Web.HttpApiData
108import Web.HttpApiData
109import Servant.API.BasicAuth ( BasicAuth )
109import Servant.API.BasicAuth ( BasicAuth )
110−import Servant.API.Capture ( Capture )
110+import Servant.API.Capture ( Capture, CaptureAll )
111import Servant.API.ReqBody ( ReqBody )
111import Servant.API.ReqBody ( ReqBody )
112import Servant.API.QueryParam ( QueryParam, QueryParams, QueryFlag )
112import Servant.API.QueryParam ( QueryParam, QueryParams, QueryFlag )
113import Servant.API.Header ( Header )
113import Servant.API.Header ( Header )
@@ -163,6 +163,8 @@ type family IsElem endpoint api :: Constraint where
163 IsElem sa (ReqBody y x :> sb) = IsElem sa sb
163 IsElem sa (ReqBody y x :> sb) = IsElem sa sb
164 IsElem (Capture z y :> sa) (Capture x y :> sb)
164 IsElem (Capture z y :> sa) (Capture x y :> sb)
165 = IsElem sa sb
165 = IsElem sa sb
166+ IsElem (CaptureAll z y :> sa) (CaptureAll x y :> sb)
166 IsElem sa (QueryParam x y :> sb) = IsElem sa sb
168 IsElem sa (QueryParam x y :> sb) = IsElem sa sb
167 IsElem sa (QueryParams x y :> sb) = IsElem sa sb
169 IsElem sa (QueryParams x y :> sb) = IsElem sa sb
168 IsElem sa (QueryFlag x :> sb) = IsElem sa sb
170 IsElem sa (QueryFlag x :> sb) = IsElem sa sb
@@ -284,6 +286,13 @@ instance (ToHttpApiData v, HasLink sub)
284 toLink (Proxy :: Proxy sub) $
286 toLink (Proxy :: Proxy sub) $
285 addSegment (escape . Text.unpack $ toUrlPiece v) l
287 addSegment (escape . Text.unpack $ toUrlPiece v) l
289+instance (ToHttpApiData v, HasLink sub)
290+ => HasLink (CaptureAll sym v :> sub) where
291+ type MkLink (CaptureAll sym v :> sub) = [v] -> MkLink sub
293+ toLink (Proxy :: Proxy sub) $
294+ foldl' (flip $ addSegment . escape . Text.unpack . toUrlPiece) l vs
287instance HasLink sub => HasLink (Header sym a :> sub) where
296instance HasLink sub => HasLink (Header sym a :> sub) where
288 type MkLink (Header sym a :> sub) = MkLink sub
297 type MkLink (Header sym a :> sub) = MkLink sub
289 toLink _ = toLink (Proxy :: Proxy sub)
298 toLink _ = toLink (Proxy :: Proxy sub)