{-# LANGUAGE OverloadedStrings #-}
module Salak.Load.Env where
import Control.Monad.IO.Class (MonadIO, liftIO)
import Data.Maybe
import qualified Data.Text as T
import Salak.Types
import Salak.Types.Value
import System.Environment
loadEnv :: MonadIO m => LoadSalakT m ()
loadEnv = do
args <- liftIO getEnvironment
loading "environment" args go
where
go p (k,v) = return (g2 k, newVStr (T.pack v) p)
g2 = T.toLower . T.pack . map (\c -> if c == '_' then '.' else c)
type ParseCommandLine = [String] -> IO [(T.Text,Priority -> Value)]
defaultParseCommandLine :: ParseCommandLine
defaultParseCommandLine = return . mapMaybe go
where
go ('-':'-':as) = case break (=='=') as of
(a,'=':b) -> Just (T.pack a, newVStr (T.pack b))
_ -> Nothing
go _ = Nothing
loadCommandLine :: MonadIO m => ParseCommandLine -> LoadSalakT m ()
loadCommandLine pcl = do
args <- liftIO $ getArgs >>= pcl
loading "commandline" args go
where
go i (k,fv) = return (k, fv i)