git.iko.soy/typeable/servant
on master help sign in
Moved GenerateList to servant-foreign.
commit2d8db459077df2915e19de41690561bcf51f9b74 authorMaksymilian Owsianny <Maksymilian.Owsianny@gmail.com> dateWed 2 Dec 2015, 11:21 (11 years ago) parent69f09f2
3 files changed+22−18
servant-foreign/src/Servant/Foreign.hs+2 servant-foreign/src/Servant/Foreign/Internal.hs+18 servant-js/src/Servant/JS.hs+2−18
servant-foreign/src/Servant/Foreign.hs+2
@@ -28,6 +28,8 @@ module Servant.Foreign
2828 , reqReturnType
2929 , segment
3030 , queryStr
31+ , listFromAPI
32+ , GenerateList(..)
3133 -- re-exports
3234 , module Servant.API
3335 ) where
servant-foreign/src/Servant/Foreign/Internal.hs+18
@@ -294,3 +294,21 @@ instance HasForeign lang sublayout => HasForeign lang (HttpVersion :> sublayout)
294294
295295 foreignFor lang Proxy req =
296296 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
122122import Servant.JS.Internal
123123import Servant.JS.JQuery
124124import Servant.JS.Vanilla
125+import Servant.Foreign (GenerateList(..), listFromAPI)
125126
126127-- Dummy type specifying target language
127128data LangJS
@@ -139,7 +140,7 @@ jsForAPI :: (HasForeign LangJS api, GenerateList (Foreign api))
139140 => Proxy api -- ^ proxy for your API type
140141 -> JavaScriptGenerator -- ^ js code generator to use (angular, vanilla js, jquery, others)
141142 -> 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)
143144
144145-- | Directly generate all the javascript functions for your API
145146-- from a 'Proxy' for your API type using the given generator
@@ -155,20 +156,3 @@ writeJSForAPI p gen fp = writeFile fp (jsForAPI p gen)
155156instance HasForeignType LangJS a where
156157 typeFor _ _ = empty
157158
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−