craft-0.0.0.1: src/Craft/Config/Ini.hs
module Craft.Config.Ini
( module Craft.Config.Ini
, module Data.Ini
, Ini(..)
, HM.fromList
)
where
import Control.Lens
import qualified Data.HashMap.Strict as HM
import Data.Ini
import qualified Data.Text as T
import Craft.Config
import Craft.Types
data IniFormat = IniFormat { _inifmt :: Ini
, _settings :: WriteIniSettings
}
iniFormat :: [(T.Text, [(T.Text, T.Text)])] -> IniFormat
iniFormat ini = IniFormat (Ini (HM.fromList $ fmap (fmap HM.fromList) ini))
(WriteIniSettings EqualsKeySeparator)
config :: Path Abs FileP -> IniFormat -> Config IniFormat
config = Craft.Config.config
instance ConfigFormat IniFormat where
showConfig format = T.unpack . printIniWith (_settings format) $ _inifmt format
parseConfig fp s =
case parseIni (T.pack s) of
Left err -> $craftError $ "Failed to parse ini file"++show fp++": "++err
Right x -> return $ IniFormat
{ _inifmt = x
, _settings = WriteIniSettings EqualsKeySeparator
}
get :: Path Abs FileP -> Craft (Maybe (Config IniFormat))
get = Craft.Config.get
lookup :: String -> String -> IniFormat -> Maybe String
lookup section key (IniFormat ini _)=
case lookupValue (T.pack section) (T.pack key) ini of
Left _ -> Nothing
Right r -> Just $ T.unpack r
makeLenses ''IniFormat