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