packages feed

serv-0.1.0.0: app/TestServer.hs

{-# LANGUAGE DataKinds             #-}
{-# LANGUAGE OverloadedStrings     #-}
{-# LANGUAGE PartialTypeSignatures #-}
{-# LANGUAGE TypeOperators         #-}

import           Data.Function            ((&))
import           Data.Proxy
import           Data.Text                (Text)
import           Network.Wai.Handler.Warp (run)
import qualified Serv.Api                 as A
import           Serv.Common
import qualified Serv.ContentType         as Ct
import qualified Serv.Cors                as Cors
import qualified Serv.Header              as H
import qualified Serv.Header.Proxies      as Hp
import           Serv.Server

type RawBody = 'A.Body '[ Ct.TextPlain ] Text

type Api
  = 'A.Cors Cors.PermitAll 'A.:>
    'A.Endpoint
      '[ 'A.Method 'A.GET '[ 'H.CacheControl 'A.::: RawText ] RawBody ]

apiProxy :: Proxy Api
apiProxy = Proxy

impl :: Impl Api IO
impl = get :<|> noOp
  where
    get =
      return
      $ emptyResponse ok200
      & withHeader Hp.cacheControl "foo"
      & withBody "Hello"

server :: Server IO
server = handle apiProxy impl

main :: IO ()
main =
  run 8000 (makeApplication defaultConfig server)