yesod/yesod-core/Yesod/Settings.hs
patrick brisbin 86c8abb853 Limit exports
2011-09-11 00:16:43 -04:00

47 lines
1.3 KiB
Haskell

module Yesod.Settings
( AppEnvironment(..)
, AppConfig(..)
, loadConfig
) where
import Control.Monad (join)
import Data.Object
import Data.Text (Text)
import qualified Data.Object.Yaml as YAML
import qualified Data.Text as T
data AppEnvironment = Development
| Test
| Staging
| Production
deriving (Eq, Show, Read, Enum, Bounded)
data AppConfig = AppConfig
{ appEnv :: AppEnvironment
, appPort :: Int
, connectionPoolSize :: Int
, appRoot :: Text
} deriving (Show)
loadConfig :: AppEnvironment -> IO AppConfig
loadConfig env = do
allSettings <- (join $ YAML.decodeFile ("config/settings.yml" :: String)) >>= fromMapping
settings <- lookupMapping (show env) allSettings
hostS <- lookupScalar "host" settings
port <- fmap read $ lookupScalar "port" settings
connectionPoolSizeS <- lookupScalar "connectionPoolSize" settings
return $ AppConfig
{ appEnv = env
, appPort = port
, appRoot = T.pack $ hostS ++ addPort port
, connectionPoolSize = read connectionPoolSizeS
}
where
addPort :: Int -> String
addPort p = case env of
Production -> ""
_ -> ":" ++ show p