{-# 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