servant-elm-0.6.0.0: examples/giphy/generate.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeOperators #-}
import qualified Elm.Derive as Elm
import Servant.API ((:>), Get, JSON, QueryParam)
import Servant.Elm (DefineElm (DefineElm), ElmOptions (urlPrefix),
Proxy (Proxy), UrlPrefix (Static), defElmImports,
defElmOptions, defaultOptions, deriveBoth,
generateElmModuleWith)
data GifData = GifData
{ image_url :: String
} deriving (Show, Eq)
data Gif = Gif
{ _data :: GifData
} deriving (Show, Eq)
concat <$> mapM
(deriveBoth defaultOptions
{ Elm.fieldLabelModifier = \ field ->
if head field == '_' then
tail field
else
field
, Elm.unwrapUnaryRecords = False
}
) [''GifData, ''Gif]
myElmOpts :: ElmOptions
myElmOpts =
defElmOptions
{ urlPrefix =
Static "http://api.giphy.com/v1/gifs"
}
type GiphyApi = "random" :> QueryParam "api_key" String :> QueryParam "tag" String :> Get '[JSON] Gif
main :: IO ()
main =
generateElmModuleWith
myElmOpts
[ "Generated"
, "GiphyApi"
]
defElmImports
"elm"
[ DefineElm (Proxy :: Proxy Gif)
, DefineElm (Proxy :: Proxy GifData)
]
(Proxy :: Proxy GiphyApi)