git.iko.soy/haskell-servant/servant-elm
on master help sign in
54 lines 1.4 kB history raw
1{-# LANGUAGE DataKinds #-}
2{-# LANGUAGE OverloadedStrings #-}
3{-# LANGUAGE TemplateHaskell #-}
4{-# LANGUAGE TypeOperators #-}
6import qualified Elm.Derive as Elm
8import Servant.API ((:>), Get, JSON, QueryParam)
9import Servant.Elm (DefineElm (DefineElm), ElmOptions (urlPrefix),
10 Proxy (Proxy), UrlPrefix (Static), defElmImports,
11 defElmOptions, defaultOptions, deriveBoth,
12 generateElmModuleWith)
14data GifData = GifData
15 { image_url :: String
16 } deriving (Show, Eq)
18data Gif = Gif
19 { _data :: GifData
20 } deriving (Show, Eq)
22concat <$> mapM
23 (deriveBoth defaultOptions
24 { Elm.fieldLabelModifier = \ field ->
25 if head field == '_' then
26 tail field
27 else
28 field
29 , Elm.unwrapUnaryRecords = False
30 }
31 ) [''GifData, ''Gif]
33myElmOpts :: ElmOptions
34myElmOpts =
35 defElmOptions
36 { urlPrefix =
37 Static "http://api.giphy.com/v1/gifs"
38 }
40type GiphyApi = "random" :> QueryParam "api_key" String :> QueryParam "tag" String :> Get '[JSON] Gif
42main :: IO ()
43main =
44 generateElmModuleWith
45 myElmOpts
46 [ "Generated"
47 , "GiphyApi"
48 ]
49 defElmImports
50 "elm"
51 [ DefineElm (Proxy :: Proxy Gif)
52 , DefineElm (Proxy :: Proxy GifData)
53 ]
54 (Proxy :: Proxy GiphyApi)