packages feed

elm-street-0.1.0.4: backend/Api.hs

{-# LANGUAGE DataKinds #-}

module Api
       ( app
       ) where

import Control.Monad.IO.Class (liftIO)
import Data.Proxy (Proxy (..))
import Network.Wai (Application)
import Servant.API ((:<|>) (..), (:>), Get, JSON, Post, ReqBody)
import Servant.Server (Handler, Server, serve)

import Types (OneType, defaultOneType)


type TypesApi
    -- Get 'OneType' from the backend side
       = "get" :> Get '[JSON] OneType
    -- Receive 'OneType' from the frontend side
    :<|> "post" :> ReqBody '[JSON] OneType :> Post '[JSON] Bool

typesApi :: Proxy TypesApi
typesApi = Proxy

typesServer :: Server TypesApi
typesServer = getHandler :<|> postHandler

getHandler :: Handler OneType
getHandler = liftIO $ putStrLn "Get handler" >> pure defaultOneType

postHandler :: OneType -> Handler Bool
postHandler = liftIO . (putStrLn "Post handler" >>) . pure . (defaultOneType ==)

app :: Application
app = serve typesApi typesServer