git.iko.soy/typeable/servant
on master help sign in
Moved GenerateList to servant-foreign.
2d8db45Maksymilian Owsianny
servant-foreign/src/Servant/Foreign.hs+2
@@ -28,6 +28,8 @@ module Servant.Foreign
28 , reqReturnType
28 , reqReturnType
29 , segment
29 , segment
30 , queryStr
30 , queryStr
31+ , listFromAPI
32+ , GenerateList(..)
31 -- re-exports
33 -- re-exports
32 , module Servant.API
34 , module Servant.API
33 ) where
35 ) where
servant-foreign/src/Servant/Foreign/Internal.hs+18
@@ -294,3 +294,21 @@ instance HasForeign lang sublayout => HasForeign lang (HttpVersion :> sublayout)
294
294
295 foreignFor lang Proxy req =
295 foreignFor lang Proxy req =
296 foreignFor lang (Proxy :: Proxy sublayout) req
296 foreignFor lang (Proxy :: Proxy sublayout) req
297+
298+-- | Utility class used by 'listFromAPI' which computes
299+-- the data needed to generate a function for each endpoint
300+-- and hands it all back in a list.
301+class GenerateList reqs where
302+ generateList :: reqs -> [Req]
303+
304+instance GenerateList Req where
305+ generateList r = [r]
306+
307+instance (GenerateList start, GenerateList rest) => GenerateList (start :<|> rest) where
308+ generateList (start :<|> rest) = (generateList start) ++ (generateList rest)
309+
310+-- | Generate the necessary data for codegen as a list, each 'Req'
311+-- describing one endpoint from your API type.
312+listFromAPI :: (HasForeign lang api, GenerateList (Foreign api)) => Proxy lang -> Proxy api -> [Req]
313+listFromAPI lang p = generateList (foreignFor lang p defReq)
314+
servant-js/src/Servant/JS.hs+2−18
@@ -122,6 +122,7 @@ import Servant.JS.Axios
122import Servant.JS.Internal
122import Servant.JS.Internal
123import Servant.JS.JQuery
123import Servant.JS.JQuery
124import Servant.JS.Vanilla
124import Servant.JS.Vanilla
125+import Servant.Foreign (GenerateList(..), listFromAPI)
125
126
126-- Dummy type specifying target language
127-- Dummy type specifying target language
127data LangJS
128data LangJS
@@ -139,7 +140,7 @@ jsForAPI :: (HasForeign LangJS api, GenerateList (Foreign api))
139 => Proxy api -- ^ proxy for your API type
140 => Proxy api -- ^ proxy for your API type
140 -> JavaScriptGenerator -- ^ js code generator to use (angular, vanilla js, jquery, others)
141 -> JavaScriptGenerator -- ^ js code generator to use (angular, vanilla js, jquery, others)
141 -> Text -- ^ a text that you can embed in your pages or write to a file
142 -> Text -- ^ a text that you can embed in your pages or write to a file
142−jsForAPI p gen = gen (listFromAPI p)
143+jsForAPI p gen = gen (listFromAPI (Proxy :: Proxy LangJS) p)
143
144
144-- | Directly generate all the javascript functions for your API
145-- | Directly generate all the javascript functions for your API
145-- from a 'Proxy' for your API type using the given generator
146-- from a 'Proxy' for your API type using the given generator
@@ -155,20 +156,3 @@ writeJSForAPI p gen fp = writeFile fp (jsForAPI p gen)
155instance HasForeignType LangJS a where
156instance HasForeignType LangJS a where
156 typeFor _ _ = empty
157 typeFor _ _ = empty
157
158
158−-- | Utility class used by 'jsForAPI' which computes
159−-- the data needed to generate a function for each endpoint
160−-- and hands it all back in a list.
161−class GenerateList reqs where
162− generateList :: reqs -> [AjaxReq]
163−
164−instance GenerateList AjaxReq where
165− generateList r = [r]
166−
167−instance (GenerateList start, GenerateList rest) => GenerateList (start :<|> rest) where
168− generateList (start :<|> rest) = (generateList start) ++ (generateList rest)
169−
170−-- | Generate the necessary data for JS codegen as a list, each 'AjaxReq'
171−-- describing one endpoint from your API type.
172−listFromAPI :: (HasForeign LangJS api, GenerateList (Foreign api)) => Proxy api -> [AjaxReq]
173−listFromAPI p = generateList (javascript p)
174−