packages feed

servant-stache-0.1.0.0: example/Main.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeOperators #-}

import GHC.Generics

import Data.Aeson
import Network.HTTP.Media ((//))
import qualified Network.Wai.Handler.Warp as Warp
import Servant
import Servant.Mustache


-- * For HTML Examle

data User = User
  { name :: String
  , age :: Int
  } deriving (Generic, ToJSON)


-- * For Template Example

data CSS

instance Accept CSS where
  contentType _ = "text" // "css"

data CSSData = CSSData
  { darken :: Bool
  , pageWidth :: Int
  } deriving (Generic, ToJSON)


-- * Server implementation

type API = Get '[HTML "user"] User
      :<|> "style.css" :> Get '[Template CSS "style"] CSSData

api :: Proxy API
api = Proxy

server :: Server API
server = pure (User "lambdabot" 35)
    :<|> pure (CSSData True 400)

main :: IO ()
main = do
  loadTemplates "example/templates"
  putStrLn "Listening on port 8080"
  Warp.run 8080 $ serve api server