inferno-vc-0.1.0: src/Inferno/VersionControl/Server/Types.hs
{-# LANGUAGE OverloadedStrings #-}
module Inferno.VersionControl.Server.Types where
import Data.Aeson.Types
import Data.ByteString (readFile)
import Data.Text (Text)
import Data.Yaml
data ServerConfig = ServerConfig
{ _serverHost :: Text,
_serverPort :: Int,
_vcPath :: FilePath
}
deriving (Show, Eq, Ord)
instance FromJSON ServerConfig where
parseJSON = withObject "ServerConfig" $ \o -> do
server <- o .: "server"
serverHost <- server .: "host"
serverPort <- server .: "port"
vcPath <- server .: "vcPath"
return $ ServerConfig serverHost serverPort vcPath
readServerConfig ::
FilePath ->
IO (Either String ServerConfig)
readServerConfig fp = do
f <- Data.ByteString.readFile fp
return $ either (Left . prettyPrintParseException) Right $ decodeEither' f