Moved the CLI argument processing stuff in its own file.
This commit is contained in:
parent
6a7d1f0381
commit
03795ac2f7
2 changed files with 64 additions and 54 deletions
63
HsbotIrcBot/Hsbot/Irc/CLI.hs
Normal file
63
HsbotIrcBot/Hsbot/Irc/CLI.hs
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
module Hsbot.Irc.CLI
|
||||||
|
( Options (..)
|
||||||
|
, defaultOptions
|
||||||
|
, header
|
||||||
|
, options
|
||||||
|
) where
|
||||||
|
|
||||||
|
import System.Console.GetOpt
|
||||||
|
import System.Exit
|
||||||
|
|
||||||
|
-- CLI argument parting stuff {{{
|
||||||
|
-- | CLI options
|
||||||
|
data Options = Options
|
||||||
|
{ optDebug :: Bool
|
||||||
|
, optConfigFile :: Maybe String
|
||||||
|
, optGroup :: Maybe String
|
||||||
|
, optUser :: Maybe String
|
||||||
|
, optVerbose :: Bool
|
||||||
|
} deriving (Show)
|
||||||
|
|
||||||
|
-- | CLI default options
|
||||||
|
defaultOptions :: Options
|
||||||
|
defaultOptions = Options { optDebug = False
|
||||||
|
, optConfigFile = Nothing
|
||||||
|
, optGroup = Nothing
|
||||||
|
, optUser = Nothing
|
||||||
|
, optVerbose = False }
|
||||||
|
|
||||||
|
-- | CLI options logic
|
||||||
|
options :: [ OptDescr (Options -> IO Options) ]
|
||||||
|
options =
|
||||||
|
[ Option "d" ["debug"]
|
||||||
|
(NoArg (\opt -> return opt { optDebug = True, optVerbose = True }))
|
||||||
|
"Enter verbose debug mode and prevents Hsbot from forking in background"
|
||||||
|
, Option "f" ["file"]
|
||||||
|
(ReqArg (\arg opt -> return opt { optConfigFile = return arg }) "<config_file>")
|
||||||
|
"The config file to use"
|
||||||
|
, Option "g" ["group"]
|
||||||
|
(ReqArg (\arg opt -> return opt { optGroup = return arg }) "<group>")
|
||||||
|
"The group hsbot will run as"
|
||||||
|
, Option "h" ["help"]
|
||||||
|
(NoArg (\_ -> do
|
||||||
|
putStrLn $ usageInfo header options
|
||||||
|
exitWith ExitSuccess))
|
||||||
|
"Print this help message"
|
||||||
|
, Option "u" ["user"]
|
||||||
|
(ReqArg (\arg opt -> return opt { optUser = return arg }) "<user>")
|
||||||
|
"The user hsbot will run as"
|
||||||
|
, Option "v" ["verbose"]
|
||||||
|
(NoArg (\opt -> return opt { optVerbose = True }))
|
||||||
|
"Enable verbose messages"
|
||||||
|
, Option "V" ["version"]
|
||||||
|
(NoArg (\_ -> do
|
||||||
|
putStrLn "hsbot-irc version 0.3"
|
||||||
|
exitWith ExitSuccess))
|
||||||
|
"Show version"
|
||||||
|
]
|
||||||
|
|
||||||
|
-- | Usage header
|
||||||
|
header :: String
|
||||||
|
header = "Usage: hsbot-irc [-dhvV] [-f config_file] [-u user] [-g group]"
|
||||||
|
-- }}}
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
module Main (main) where
|
module Main (main) where
|
||||||
|
|
||||||
import Control.Monad (when)
|
import Control.Monad (when)
|
||||||
import Prelude hiding (catch)
|
|
||||||
import System.Console.GetOpt
|
import System.Console.GetOpt
|
||||||
import System.Environment
|
import System.Environment
|
||||||
import System.Exit
|
import System.Exit
|
||||||
import System.IO
|
import System.IO
|
||||||
|
|
||||||
|
import Hsbot.Irc.CLI
|
||||||
import Hsbot.Irc.Config
|
import Hsbot.Irc.Config
|
||||||
|
|
||||||
-- | Main function
|
-- | Main function
|
||||||
|
@ -27,56 +27,3 @@ main = do
|
||||||
ircConfig <- getIrcConfig $ optConfigFile opts
|
ircConfig <- getIrcConfig $ optConfigFile opts
|
||||||
when (optDebug opts) . putStrLn $ "[hsbot-irc] Compiled config :\n" ++ (show ircConfig)
|
when (optDebug opts) . putStrLn $ "[hsbot-irc] Compiled config :\n" ++ (show ircConfig)
|
||||||
|
|
||||||
-- CLI argument parting stuff {{{
|
|
||||||
-- | CLI options
|
|
||||||
data Options = Options
|
|
||||||
{ optDebug :: Bool
|
|
||||||
, optConfigFile :: Maybe String
|
|
||||||
, optGroup :: Maybe String
|
|
||||||
, optUser :: Maybe String
|
|
||||||
, optVerbose :: Bool
|
|
||||||
} deriving (Show)
|
|
||||||
|
|
||||||
-- | CLI default options
|
|
||||||
defaultOptions :: Options
|
|
||||||
defaultOptions = Options { optDebug = False
|
|
||||||
, optConfigFile = Nothing
|
|
||||||
, optGroup = Nothing
|
|
||||||
, optUser = Nothing
|
|
||||||
, optVerbose = False }
|
|
||||||
|
|
||||||
-- | CLI options logic
|
|
||||||
options :: [ OptDescr (Options -> IO Options) ]
|
|
||||||
options =
|
|
||||||
[ Option "d" ["debug"]
|
|
||||||
(NoArg (\opt -> return opt { optDebug = True, optVerbose = True }))
|
|
||||||
"Enter verbose debug mode and prevents Hsbot from forking in background"
|
|
||||||
, Option "f" ["file"]
|
|
||||||
(ReqArg (\arg opt -> return opt { optConfigFile = return arg }) "<config_file>")
|
|
||||||
"The config file to use"
|
|
||||||
, Option "g" ["group"]
|
|
||||||
(ReqArg (\arg opt -> return opt { optGroup = return arg }) "<group>")
|
|
||||||
"The group hsbot will run as"
|
|
||||||
, Option "h" ["help"]
|
|
||||||
(NoArg (\_ -> do
|
|
||||||
putStrLn $ usageInfo header options
|
|
||||||
exitWith ExitSuccess))
|
|
||||||
"Print this help message"
|
|
||||||
, Option "u" ["user"]
|
|
||||||
(ReqArg (\arg opt -> return opt { optUser = return arg }) "<user>")
|
|
||||||
"The user hsbot will run as"
|
|
||||||
, Option "v" ["verbose"]
|
|
||||||
(NoArg (\opt -> return opt { optVerbose = True }))
|
|
||||||
"Enable verbose messages"
|
|
||||||
, Option "V" ["version"]
|
|
||||||
(NoArg (\_ -> do
|
|
||||||
putStrLn "hsbot-irc version 0.3"
|
|
||||||
exitWith ExitSuccess))
|
|
||||||
"Show version"
|
|
||||||
]
|
|
||||||
|
|
||||||
-- | Usage header
|
|
||||||
header :: String
|
|
||||||
header = "Usage: hsbot-irc [-dhvV] [-f config_file] [-u user] [-g group]"
|
|
||||||
-- }}}
|
|
||||||
|
|
||||||
|
|
Reference in a new issue