packages feed

htsn-0.0.1: src/CommandLine.hs

-- | Parse the command-line options, and display help text if
--   necessary.
module CommandLine (
  get_args )
where

import System.Console.CmdArgs (
  (&=),
  args,
  cmdArgs,
  def,
  details,
  help,
  program,
  summary,
  typ,
  typFile,
  typDir )

-- This let's us get the version from Cabal.
import Paths_htsn (version)
import Data.Version (showVersion)

import OptionalConfiguration ( OptionalConfiguration(..) )

-- | The description of the program, displayed as part of the help.
description :: String
description = "Parse XML files from The Sports Network feed."

-- | The name of this program.
program_name :: String
program_name = "htsn"

-- | A summary string output as part of the help.
my_summary :: String
my_summary = program_name ++ "-" ++ (showVersion version)


-- | A description of the "daemonize" option.
daemonize_help :: String
daemonize_help =
  "Run as a daemon, in the background."

-- | A description of the "log_file" option.
log_file_help :: String
log_file_help =
  "Log to the given file."

-- | A description of the "log_level" option.
log_level_help :: String
log_level_help =
  "How verbose should the logs be? One of INFO, WARNING, ERROR."

-- | A description of the "output_directory" option.
output_directory_help :: String
output_directory_help =
  "Directory in which to output the XML files; must be writable."

-- | A description of the "password" option.
password_help :: String
password_help =
  "Password to use when connecting to the feed."

-- | A description of the "pidfile" option.
pidfile_help :: String
pidfile_help =
  "Location to create PID file (daemon only)."

-- | A description of the "run_as_group" option.
run_as_group_help :: String
run_as_group_help =
  "System group to run as (daemon only)."

-- | A description of the "run_as_user" option.
run_as_user_help :: String
run_as_user_help =
  "System user to run under (daemon only)."

-- | A description of the "syslog" option.
syslog_help :: String
syslog_help =
  "Enable logging to syslog."

-- | A description of the "username" option.
username_help :: String
username_help =
  "Username to use when connecting to the feed."

-- | A data structure representing the possible command-line
--   options. The CmdArgs library is doing heavy magic beneath the
--   hood here.
arg_spec :: OptionalConfiguration
arg_spec =
  OptionalConfiguration {
    -- Use an empty list for feed_hosts since cmdargs will appends to
    -- the default when the user supplies feed hosts. If he specifies
    -- any, those are all we should use.
    daemonize        = def &= typ "BOOL"      &= help daemonize_help,
    feed_hosts       = def &= typ "HOSTNAMES" &= args,
    log_file         = def &= typFile         &= help log_file_help,
    log_level        = def &= typ "LEVEL"     &= help log_level_help,
    output_directory = def &= typDir          &= help output_directory_help,
    password         = def &= typ "PASSWORD"  &= help password_help,
    pidfile          = def &= typFile         &= help pidfile_help,
    run_as_group     = def &= typ "GROUP"     &= help run_as_group_help,
    run_as_user      = def &= typ "USER"      &= help run_as_user_help,
    syslog           = def &= typ "BOOL"      &= help syslog_help,
    username         = def &= typ "USERNAME"  &= help username_help }
  &= program program_name
  &= summary my_summary
  &= details [description]


-- | A convenience function; our only export. Meant to be used in
--   'main' to retrieve the command-line arguments.
get_args :: IO OptionalConfiguration
get_args = cmdArgs arg_spec