@@ -5,9 +5,16 @@ import Options.Applicative
55import ProjectM36.Server.Config
66import Data.Monoid
77
8−parseArgs :: Parser ServerConfig
9−parseArgs = ServerConfig <$> parsePersistenceStrategy <*> parseDatabaseName <*> parseHostname <*> parsePort <*> many parseGhcPkgPaths <*> parseTimeout <*> pure False
10−
8+parseArgsWithDefaults :: ServerConfig -> Parser ServerConfig
9+parseArgsWithDefaults defaults = ServerConfig <$>
10+ parsePersistenceStrategy <*>
11+ parseDatabaseName <*>
12+ parseHostname (bindHost defaults) <*>
13+ parsePort (bindPort defaults) <*>
14+ many parseGhcPkgPaths <*>
15+ parseTimeout (perRequestTimeout defaults) <*>
16+ pure False
17+
1118parsePersistenceStrategy :: Parser PersistenceStrategy
1219parsePersistenceStrategy = CrashSafePersistence <$> (dbdirOpt <* fsyncOpt) <|>
1320 MinimalPersistence <$> dbdirOpt <|>
@@ -27,27 +34,29 @@ parseDatabaseName = strOption (short 'n' <>
2734 long "database" <>
2835 metavar "DATABASE_NAME")
2936
30−parseHostname :: Parser Hostname
31−parseHostname = strOption (short 'h' <>
37+parseHostname :: Hostname -> Parser Hostname
38+parseHostname defHostname = strOption (short 'h' <>
3239 long "hostname" <>
3340 metavar "HOST_NAME" <>
34− value (bindHost defaultServerConfig))
41+ value defHostname)
3542
36−parsePort :: Parser Port
37−parsePort = option auto (short 'p' <>
43+parsePort :: Port -> Parser Port
44+parsePort defPort = option auto (short 'p' <>
3845 long "port" <>
3946 metavar "PORT_NUMBER" <>
40− value (bindPort defaultServerConfig))
47+ value defPort)
4148
4249parseGhcPkgPaths :: Parser String
4350parseGhcPkgPaths = strOption (long "ghc-pkg-dir" <>
4451 metavar "GHC_PACKAGE_DIRECTORY")
4552
46−parseTimeout :: Parser Int
47−parseTimeout = option auto (long "timeout" <>
53+parseTimeout :: Int -> Parser Int
54+parseTimeout defTimeout = option auto (long "timeout" <>
4855 metavar "MICROSECONDS" <>
49− value (perRequestTimeout defaultServerConfig))
56+ value defTimeout)
5057
5158parseConfig :: IO ServerConfig
52−parseConfig = execParser $ info parseArgs idm
59+parseConfig = parseConfigWithDefaults defaultServerConfig
5360
61+parseConfigWithDefaults :: ServerConfig -> IO ServerConfig
62+parseConfigWithDefaults defaults = execParser (info (parseArgsWithDefaults defaults) idm)