-- | Config.hs
-- A module which parse config file and contain Config structure for
-- further usage.
module Config (
Config(..),
readConfig
) where
import Data.ConfigFile
import System.Directory
import Control.Monad.Error
-- | Config structure.
data Config = Config
{ cport :: Int
, cprivateKey :: String
} deriving Show
-- | Read config file in home directory and return conf structure.
readConfig :: String -> IO Config
readConfig filePath = do
home <- getHomeDirectory
config <- runErrorT $ do
conf <- join $ liftIO $ readfile emptyCP (home++"/"++filePath)
let param = get conf "board"
liftM2 Config (liftM read (param "port"))
(param "privatekey")
case config of
Left e -> error $ "Can't parse config file.\n"++show e
Right conf -> return conf