packages feed

hcheckers-0.1.0.2: src/Core/CmdLine.hs

module Core.CmdLine where

import Options.Applicative
import Data.Char (toLower)

data CmdLine = CmdLine {
      cmdConfigPath :: Maybe FilePath
    , cmdLocal :: Maybe Bool
    , cmdBattleServer :: Maybe Bool
    , cmdMetrics :: Maybe Bool
    , cmdSpecial :: Maybe String
    }
  deriving (Eq, Show)

bool :: ReadM Bool
bool = eitherReader $ \str ->
  case map toLower str of
    "on" -> Right True
    "true" -> Right True
    "off" -> Right False
    "false" -> Right False
    _ -> Left $ "Unknown boolean value: " ++ str

cmdline :: Parser CmdLine
cmdline = CmdLine
  <$> optional (strOption
        ( long "config"
         <> short 'c'
         <> metavar "PATH"
         <> help "Path to the config file" ) )
  <*> optional (option bool
        ( long "local"
         <> short 'L'
         <> metavar "on|off"
         <> help "Run server in local mode" ) )
  <*> optional (option bool
        ( long "battle"
          <> short 'B'
          <> metavar "on|off"
          <> help "Run `battle server' instead of normal game server") )
  <*> optional (option bool
        ( long "metrics"
          <> metavar "on|off"
          <> help "Enable or disable metrics monitoring. This command-line option overrides one specified in the config file.")
        )
  <*> optional (strOption
        ( long "special"
         <> metavar "COMMAND" ) )

parserInfo :: ParserInfo CmdLine
parserInfo = info (cmdline <**> helper)
  ( fullDesc
    <> progDesc "HCheckers server application"
    <> header "Run HCheckers server" )