30 lines
831 B
Haskell
30 lines
831 B
Haskell
|
{-# LANGUAGE OverloadedStrings #-}
|
||
|
module Config where
|
||
|
|
||
|
import qualified Toml
|
||
|
import Toml(TomlCodec, (.=))
|
||
|
import qualified Data.Text as T
|
||
|
|
||
|
data Config = Config {
|
||
|
mailDomain :: String
|
||
|
,mailUsername :: String
|
||
|
,mailPassword :: String
|
||
|
,mailTo :: T.Text
|
||
|
,mailFrom :: T.Text
|
||
|
} deriving Show
|
||
|
|
||
|
configCodec :: TomlCodec Config
|
||
|
configCodec = Config
|
||
|
<$> Toml.string "mailDomain" .= mailDomain
|
||
|
<*> Toml.string "mailUser" .= mailUsername
|
||
|
<*> Toml.string "mailPassword" .= mailPassword
|
||
|
<*> Toml.text "mailTo" .= mailTo
|
||
|
<*> Toml.text "mailFrom" .= mailFrom
|
||
|
|
||
|
parseFile :: String -> IO (Either String Config)
|
||
|
parseFile path = do
|
||
|
config <- Toml.decodeFileEither configCodec path
|
||
|
case config of
|
||
|
Left errors -> return $ Left $ unwords $ fmap show errors
|
||
|
Right x -> return $ Right $ x
|