sproxy-web-0.3.1: src/Config.hs
{-# LANGUAGE OverloadedStrings, TemplateHaskell #-}
module Config where
import Control.Exception
import Data.ByteString (ByteString)
import Data.Configurator as C
import HFlags
import System.Directory
import System.FilePath
import Paths_sproxy_web
defineFlag "c:config" ("sproxy-web.config" :: String) "config file"
data Config = Config {
dbConnectionString :: ByteString,
port :: Int,
staticDir :: FilePath
}
deriving (Show, Eq)
-- | Get the connection string and the port
-- from the config file
getConfig :: FilePath -> IO Config
getConfig configFile = do
conf <- C.load [C.Required configFile]
Config <$>
C.require conf "db_connection_string" <*>
C.require conf "port" <*>
getStaticDir
getStaticDir :: IO FilePath
getStaticDir = do
currentDir <- getCurrentDirectory
staticExists <- doesDirectoryExist (currentDir </> "static")
if staticExists then do
return currentDir
else do
cabalDataDir <- getDataDir
cabalDataDirExists <- doesDirectoryExist cabalDataDir
if cabalDataDirExists
then return cabalDataDir
else throwIO (ErrorCall "directory for static files not found.")