Open
Description
I was trying to write a ToLink
instance for a custom combinator called AllQueryParams
(that captures all query parameters). Unfortunately, it seems almost impossible without resorting to type-level magic, because neither are the constructors of Link
exported, nor is addQueryParams
exported.
Is there an obvious way of doing this, which I might be missing?
Here's my (non-working) code snippet:
data AllQueryParams
instance (HasServer api context) => HasServer (AllQueryParams :> api) context where
type ServerT (AllQueryParams :> api) m = ([(BS.ByteString, Maybe BS.ByteString)] -> ServerT api m)
hoistServerWithContext _ pc nt s = hoistServerWithContext (Proxy :: Proxy api) pc nt . s
route _ context subServer = route (Proxy :: Proxy api) context delayed
where
delayed = passToServer subServer queryString
instance (HasLink sub) => HasLink (AllQueryParams :> sub) where
type MkLink (AllQueryParams :> sub) a = ([(BS.ByteString, Maybe BS.ByteString)] -> MkLink sub a)
toLink toL _ lnk qparams = toLink toL (Proxy :: Proxy sub) $
DL.foldl' (\l (k, v) -> addQueryParam (SingleParam (toS k) (toS $ fromMaybe "" v)) l) lnk qparams
Metadata
Metadata
Assignees
Type
Projects
Status
In review