@@ -5,9 +5,16 @@ import Options.Applicative
5import ProjectM36.Server.Config
5import ProjectM36.Server.Config
6import Data.Monoid
6import Data.Monoid
8−parseArgs :: Parser ServerConfig
8+parseArgsWithDefaults :: ServerConfig -> Parser ServerConfig
9−parseArgs = ServerConfig <$> parsePersistenceStrategy <*> parseDatabaseName <*> parseHostname <*> parsePort <*> many parseGhcPkgPaths <*> parseTimeout <*> pure False
9+parseArgsWithDefaults defaults = ServerConfig <$>
10−
10+ parsePersistenceStrategy <*>
11+ parseDatabaseName <*>
12+ parseHostname (bindHost defaults) <*>
13+ parsePort (bindPort defaults) <*>
14+ many parseGhcPkgPaths <*>
15+ parseTimeout (perRequestTimeout defaults) <*>
11parsePersistenceStrategy :: Parser PersistenceStrategy
18parsePersistenceStrategy :: Parser PersistenceStrategy
12parsePersistenceStrategy = CrashSafePersistence <$> (dbdirOpt <* fsyncOpt) <|>
19parsePersistenceStrategy = CrashSafePersistence <$> (dbdirOpt <* fsyncOpt) <|>
13 MinimalPersistence <$> dbdirOpt <|>
20 MinimalPersistence <$> dbdirOpt <|>
@@ -27,27 +34,29 @@ parseDatabaseName = strOption (short 'n' <>
27 long "database" <>
34 long "database" <>
28 metavar "DATABASE_NAME")
35 metavar "DATABASE_NAME")
30−parseHostname :: Parser Hostname
37+parseHostname :: Hostname -> Parser Hostname
31−parseHostname = strOption (short 'h' <>
38+parseHostname defHostname = strOption (short 'h' <>
32 long "hostname" <>
39 long "hostname" <>
33 metavar "HOST_NAME" <>
40 metavar "HOST_NAME" <>
34− value (bindHost defaultServerConfig))
41+ value defHostname)
36−parsePort :: Parser Port
43+parsePort :: Port -> Parser Port
37−parsePort = option auto (short 'p' <>
44+parsePort defPort = option auto (short 'p' <>
38 long "port" <>
45 long "port" <>
39 metavar "PORT_NUMBER" <>
46 metavar "PORT_NUMBER" <>
40− value (bindPort defaultServerConfig))
47+ value defPort)
42parseGhcPkgPaths :: Parser String
49parseGhcPkgPaths :: Parser String
43parseGhcPkgPaths = strOption (long "ghc-pkg-dir" <>
50parseGhcPkgPaths = strOption (long "ghc-pkg-dir" <>
44 metavar "GHC_PACKAGE_DIRECTORY")
51 metavar "GHC_PACKAGE_DIRECTORY")
46−parseTimeout :: Parser Int
53+parseTimeout :: Int -> Parser Int
47−parseTimeout = option auto (long "timeout" <>
54+parseTimeout defTimeout = option auto (long "timeout" <>
48 metavar "MICROSECONDS" <>
55 metavar "MICROSECONDS" <>
49− value (perRequestTimeout defaultServerConfig))
56+ value defTimeout)
51parseConfig :: IO ServerConfig
58parseConfig :: IO ServerConfig
52−parseConfig = execParser $ info parseArgs idm
59+parseConfig = parseConfigWithDefaults defaultServerConfig
61+parseConfigWithDefaults :: ServerConfig -> IO ServerConfig
62+parseConfigWithDefaults defaults = execParser (info (parseArgsWithDefaults defaults) idm)