{-# Language OverloadedStrings #-} module Config where import Data.Ini.Config import Data.Text.IO as TI type Colour = String data Config = Config { cFPS :: Integer, cIDir :: FilePath, cODir :: FilePath, cGif :: Bool, cSerial :: Bool, -- fg, bg cColours :: (Colour, Colour) } deriving (Show) configParser :: IniParser Config configParser = do fps <- section "general" $ do i <- fieldOf "fps" number return i (idir, odir) <- section "directory" $ do i <- fieldOf "input" string o <- fieldOf "output" string return (i, o) (bgif, bser) <- section "render" $ do g <- fieldOf "gif" flag s <- fieldOf "serial" flag return (g, s) (fgcol, bgcol) <- section "gif" $ do f <- fieldOf "fgcol" string b <- fieldOf "bgcol" string return (f, b) return (Config fps idir odir bgif bser (fgcol, bgcol)) getConfig :: IO Config getConfig = TI.readFile "config.ini" >>= \t -> let ec = parseIniFile t configParser in case ec of Left e -> error ("error in ini: " ++ e) Right c -> return c