48 lines
1,002 B
Haskell
48 lines
1,002 B
Haskell
|
{-# LANGUAGE DeriveGeneric, OverloadedStrings #-}
|
||
|
module Config
|
||
|
( getDataSeedPath, getDbPath
|
||
|
) where
|
||
|
import Data.Aeson
|
||
|
import Data.Text
|
||
|
|
||
|
import qualified Data.ByteString.Lazy as B
|
||
|
import GHC.Generics
|
||
|
|
||
|
|
||
|
|
||
|
data Config = Config{
|
||
|
dataseedpath :: String,
|
||
|
dbPath :: String
|
||
|
} deriving (Show,Generic)
|
||
|
|
||
|
instance FromJSON Config
|
||
|
instance ToJSON Config
|
||
|
|
||
|
configFile = "./config.json"
|
||
|
getJSON :: IO B.ByteString
|
||
|
getJSON = B.readFile configFile
|
||
|
|
||
|
|
||
|
readConfig :: IO (Maybe Config)
|
||
|
readConfig = do
|
||
|
result <- (eitherDecode <$> getJSON) :: IO (Either String Config)
|
||
|
case result of
|
||
|
Right conf ->
|
||
|
return (Just conf)
|
||
|
Left err -> do
|
||
|
putStrLn err
|
||
|
return Nothing
|
||
|
|
||
|
getConfig = extract readConfig
|
||
|
|
||
|
getDataSeedPath ::IO (String)
|
||
|
getDataSeedPath = do
|
||
|
dataseedpath <$> getConfig
|
||
|
|
||
|
getDbPath ::IO (String)
|
||
|
getDbPath = do
|
||
|
dbPath <$> getConfig
|
||
|
|
||
|
extract :: IO (Maybe a) -> IO a
|
||
|
extract = (>>= maybe (ioError $ userError "Could not read config!") return)
|