git.iko.soy/typeable/servant
on master help sign in
canonicalize API type before generating jquery functions, flattening everything on the way
commit0644c8dd799bb9c568297a944a33210b37f8bc0e authorAlp Mestanogullari <alpmestan@gmail.com> dateMon 9 Mar 2015, 22:54 (12 years ago) parentb09e2bf
3 files changed+22−20
src/Servant/JQuery.hs+2−2 src/Servant/JQuery/Internal.hs+17−15 test/Servant/JQuerySpec/CustomHeaders.hs+3−3
src/Servant/JQuery.hs+2−2
@@ -26,8 +26,8 @@ import Data.Proxy
2626import Servant.API
2727import Servant.JQuery.Internal
2828
29−jquery :: HasJQ layout => Proxy layout -> JQ layout
30−jquery p = jqueryFor p defReq
29+jquery :: HasJQ (Canonicalize layout) => Proxy layout -> JQ layout
30+jquery p = jqueryFor (canonicalize p) defReq
3131
3232-- js codegen
3333generateJS :: AjaxReq -> String
src/Servant/JQuery/Internal.hs+17−15
@@ -191,12 +191,14 @@ type family Elem (a :: *) (ls::[*]) :: Constraint where
191191 Elem a (b ': list) = Elem a list
192192
193193class HasJQ (layout :: *) where
194− type JQ layout :: *
195− jqueryFor :: Proxy layout -> AjaxReq -> JQ layout
194+ type JQ' layout :: *
195+ jqueryFor :: Proxy layout -> AjaxReq -> JQ' layout
196+
197+type JQ layout = JQ' (Canonicalize layout)
196198
197199instance (HasJQ a, HasJQ b)
198200 => HasJQ (a :<|> b) where
199− type JQ (a :<|> b) = JQ a :<|> JQ b
201+ type JQ' (a :<|> b) = JQ' a :<|> JQ' b
200202
201203 jqueryFor Proxy req =
202204 jqueryFor (Proxy :: Proxy a) req
@@ -204,7 +206,7 @@ instance (HasJQ a, HasJQ b)
204206
205207instance (KnownSymbol sym, HasJQ sublayout)
206208 => HasJQ (Capture sym a :> sublayout) where
207− type JQ (Capture sym a :> sublayout) = JQ sublayout
209+ type JQ' (Capture sym a :> sublayout) = JQ' sublayout
208210
209211 jqueryFor Proxy req =
210212 jqueryFor (Proxy :: Proxy sublayout) $
@@ -213,14 +215,14 @@ instance (KnownSymbol sym, HasJQ sublayout)
213215 where str = symbolVal (Proxy :: Proxy sym)
214216
215217instance HasJQ Delete where
216− type JQ Delete = AjaxReq
218+ type JQ' Delete = AjaxReq
217219
218220 jqueryFor Proxy req =
219221 req & funcName %~ ("delete" <>)
220222 & reqMethod .~ "DELETE"
221223
222224instance Elem JSON list => HasJQ (Get list a) where
223− type JQ (Get list a) = AjaxReq
225+ type JQ' (Get list a) = AjaxReq
224226
225227 jqueryFor Proxy req =
226228 req & funcName %~ ("get" <>)
@@ -228,7 +230,7 @@ instance Elem JSON list => HasJQ (Get list a) where
228230
229231instance (KnownSymbol sym, HasJQ sublayout)
230232 => HasJQ (Header sym a :> sublayout) where
231− type JQ (Header sym a :> sublayout) = JQ sublayout
233+ type JQ' (Header sym a :> sublayout) = JQ' sublayout
232234
233235 jqueryFor Proxy req =
234236 jqueryFor subP (req & reqHeaders <>~ [HeaderArg hname])
@@ -237,14 +239,14 @@ instance (KnownSymbol sym, HasJQ sublayout)
237239 subP = Proxy :: Proxy sublayout
238240
239241instance Elem JSON list => HasJQ (Post list a) where
240− type JQ (Post list a) = AjaxReq
242+ type JQ' (Post list a) = AjaxReq
241243
242244 jqueryFor Proxy req =
243245 req & funcName %~ ("post" <>)
244246 & reqMethod .~ "POST"
245247
246248instance Elem JSON list => HasJQ (Put list a) where
247− type JQ (Put list a) = AjaxReq
249+ type JQ' (Put list a) = AjaxReq
248250
249251 jqueryFor Proxy req =
250252 req & funcName %~ ("put" <>)
@@ -252,7 +254,7 @@ instance Elem JSON list => HasJQ (Put list a) where
252254
253255instance (KnownSymbol sym, HasJQ sublayout)
254256 => HasJQ (QueryParam sym a :> sublayout) where
255− type JQ (QueryParam sym a :> sublayout) = JQ sublayout
257+ type JQ' (QueryParam sym a :> sublayout) = JQ' sublayout
256258
257259 jqueryFor Proxy req =
258260 jqueryFor (Proxy :: Proxy sublayout) $
@@ -262,7 +264,7 @@ instance (KnownSymbol sym, HasJQ sublayout)
262264
263265instance (KnownSymbol sym, HasJQ sublayout)
264266 => HasJQ (QueryParams sym a :> sublayout) where
265− type JQ (QueryParams sym a :> sublayout) = JQ sublayout
267+ type JQ' (QueryParams sym a :> sublayout) = JQ' sublayout
266268
267269 jqueryFor Proxy req =
268270 jqueryFor (Proxy :: Proxy sublayout) $
@@ -272,7 +274,7 @@ instance (KnownSymbol sym, HasJQ sublayout)
272274
273275instance (KnownSymbol sym, HasJQ sublayout)
274276 => HasJQ (QueryFlag sym :> sublayout) where
275− type JQ (QueryFlag sym :> sublayout) = JQ sublayout
277+ type JQ' (QueryFlag sym :> sublayout) = JQ' sublayout
276278
277279 jqueryFor Proxy req =
278280 jqueryFor (Proxy :: Proxy sublayout) $
@@ -312,14 +314,14 @@ instance (KnownSymbol sym, HasJQ sublayout)
312314 where str = symbolVal (Proxy :: Proxy sym)
313315
314316instance HasJQ Raw where
315− type JQ Raw = Method -> AjaxReq
317+ type JQ' Raw = Method -> AjaxReq
316318
317319 jqueryFor Proxy req method =
318320 req & funcName %~ ((toLower <$> method) <>)
319321 & reqMethod .~ method
320322
321323instance (Elem JSON list, HasJQ sublayout) => HasJQ (ReqBody list a :> sublayout) where
322− type JQ (ReqBody list a :> sublayout) = JQ sublayout
324+ type JQ' (ReqBody list a :> sublayout) = JQ' sublayout
323325
324326 jqueryFor Proxy req =
325327 jqueryFor (Proxy :: Proxy sublayout) $
@@ -327,7 +329,7 @@ instance (Elem JSON list, HasJQ sublayout) => HasJQ (ReqBody list a :> sublayout
327329
328330instance (KnownSymbol path, HasJQ sublayout)
329331 => HasJQ (path :> sublayout) where
330− type JQ (path :> sublayout) = JQ sublayout
332+ type JQ' (path :> sublayout) = JQ' sublayout
331333
332334 jqueryFor Proxy req =
333335 jqueryFor (Proxy :: Proxy sublayout) $
test/Servant/JQuerySpec/CustomHeaders.hs+3−3
@@ -22,7 +22,7 @@ data Authorization (sym :: Symbol) a
2222
2323instance (KnownSymbol sym, HasJQ sublayout)
2424 => HasJQ (Authorization sym a :> sublayout) where
25− type JQ (Authorization sym a :> sublayout) = JQ sublayout
25+ type JQ' (Authorization sym a :> sublayout) = JQ' sublayout
2626
2727 jqueryFor Proxy req = jqueryFor (Proxy :: Proxy sublayout) $
2828 req & reqHeaders <>~ [ ReplaceHeaderArg "Authorization" $
@@ -35,7 +35,7 @@ data MyLovelyHorse a
3535
3636instance (HasJQ sublayout)
3737 => HasJQ (MyLovelyHorse a :> sublayout) where
38− type JQ (MyLovelyHorse a :> sublayout) = JQ sublayout
38+ type JQ' (MyLovelyHorse a :> sublayout) = JQ' sublayout
3939
4040 jqueryFor Proxy req = jqueryFor (Proxy :: Proxy sublayout) $
4141 req & reqHeaders <>~ [ ReplaceHeaderArg "X-MyLovelyHorse" tpl ]
@@ -47,7 +47,7 @@ data WhatsForDinner a
4747
4848instance (HasJQ sublayout)
4949 => HasJQ (WhatsForDinner a :> sublayout) where
50− type JQ (WhatsForDinner a :> sublayout) = JQ sublayout
50+ type JQ' (WhatsForDinner a :> sublayout) = JQ' sublayout
5151
5252 jqueryFor Proxy req = jqueryFor (Proxy :: Proxy sublayout) $
5353 req & reqHeaders <>~ [ ReplaceHeaderArg "X-WhatsForDinner" tpl ]