servant-elm-0.6.0.0: examples/e2e-tests/generate.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeOperators #-}
import Servant.API ((:<|>), (:>), Capture, Get, GetNoContent, JSON,
Post, QueryParam, ReqBody)
import Servant.Elm (DefineElm (DefineElm), ElmOptions(..), Proxy (Proxy),
UrlPrefix (Static), defaultOptions, defElmImports,
defElmOptions, deriveBoth, generateElmModuleWith)
myElmOpts :: ElmOptions
myElmOpts = defElmOptions { urlPrefix = Static "https://httpbin.org" }
data MessageBody = MessageBody
{ message :: String }
data QueryArgs = QueryArgs
{ q :: String }
data Response = Response
{ origin :: String }
data ResponseWithJson = ResponseWithJson
{ json :: MessageBody }
data ResponseWithArgs = ResponseWithArgs
{ args :: QueryArgs }
concat <$> mapM
(deriveBoth defaultOptions)
[''MessageBody, ''QueryArgs, ''Response, ''ResponseWithJson, ''ResponseWithArgs]
type Api
= "ip"
:> Get '[JSON] Response
:<|> "status"
:> "204"
:> GetNoContent '[JSON] ()
:<|> "post"
:> ReqBody '[JSON] MessageBody
:> Post '[JSON] ResponseWithJson
:<|> "get"
:> QueryParam "q" String
:> Get '[JSON] ResponseWithArgs
:<|> Capture "path" String
:> Get '[JSON] Response
main :: IO ()
main =
generateElmModuleWith
myElmOpts
[ "Generated"
, "Api"
]
defElmImports
"elm"
[ DefineElm (Proxy :: Proxy MessageBody)
, DefineElm (Proxy :: Proxy QueryArgs)
, DefineElm (Proxy :: Proxy Response)
, DefineElm (Proxy :: Proxy ResponseWithJson)
, DefineElm (Proxy :: Proxy ResponseWithArgs)
]
(Proxy :: Proxy Api)