blob: 895b3550f7035630bee59f9485b281c4628f9b95 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE FlexibleContexts #-}
module Config
( getConfig
, Config(..)
) where
import Data.ConfigFile
import Data.Text (Text)
import qualified Data.Text as T
import Control.Monad.Trans.Error (runErrorT)
import Control.Monad.IO.Class (liftIO)
import Control.Monad (join)
import Control.Arrow (left)
import Control.Applicative (liftA3)
data Config = Config
{ hostname :: Text
, port :: Int
, signInExpirationMn :: Int
} deriving (Read, Eq, Show)
getConfig :: FilePath -> IO (Either Text Config)
getConfig filePath =
left (T.pack . show) <$> (runErrorT $ do
cp <- join $ liftIO $ readfile emptyCP filePath
liftA3
Config
(T.pack <$> get cp "DEFAULT" "hostname")
(get cp "DEFAULT" "port")
(get cp "DEFAULT" "sign-in-expiration-mn")
)
|