packages feed

rest-example-0.1.0.1: snap/Main.hs

module Main (main) where

import Control.Monad.Trans (liftIO)
import Snap.Http.Server
import Snap.Core

import Rest.Driver.Snap (apiToHandler')

import Api (api)
import ApiTypes (ServerData (..), runBlogApi)
import Example (exampleBlog)

-- | Run the server
main :: IO ()
main = do
  -- Set up the server state
  serverData <- exampleBlog

  -- Setup the Snap configuration.
  let cfg = setPort 3000
          . setAccessLog ConfigNoLog
          . setErrorLog  ConfigNoLog
          $ defaultConfig

  -- Start snap
  httpServe cfg (handle serverData)

-- | Request handler
handle :: ServerData -> Snap ()
handle serverData = apiToHandler' (liftIO . runBlogApi serverData) api