37 lines
870 B
Haskell
37 lines
870 B
Haskell
{-# LANGUAGE DataKinds #-}
|
|
{-# LANGUAGE TypeFamilies #-}
|
|
{-# LANGUAGE DeriveGeneric #-}
|
|
{-# LANGUAGE TypeOperators #-}
|
|
{-# LANGUAGE OverloadedStrings #-}
|
|
module GS5 where
|
|
|
|
import Control.Monad.IO.Class
|
|
import Control.Monad.Trans.Either
|
|
import Data.Aeson
|
|
import GHC.Generics
|
|
import Network.Wai
|
|
import Servant
|
|
import System.Directory
|
|
|
|
type IOAPI = "myfile.txt" :> Get '[JSON] FileContent
|
|
|
|
ioAPI :: Proxy IOAPI
|
|
ioAPI = Proxy
|
|
|
|
newtype FileContent = FileContent
|
|
{ content :: String }
|
|
deriving Generic
|
|
|
|
instance ToJSON FileContent
|
|
|
|
server :: Server IOAPI
|
|
server = do
|
|
exists <- liftIO (doesFileExist "myfile.txt")
|
|
if exists
|
|
then liftIO (readFile "myfile.txt") >>= return . FileContent
|
|
else left custom404Err
|
|
|
|
where custom404Err = err404 { errBody = "myfile.txt just isn't there, please leave this server alone." }
|
|
|
|
app :: Application
|
|
app = serve ioAPI server
|