ideas-0.5.8: src/Service/Options.hs
-----------------------------------------------------------------------------
-- Copyright 2009, Open Universiteit Nederland. This file is distributed
-- under the terms of the GNU General Public License. For more information,
-- see the file "LICENSE.txt", which is included in the distribution.
-----------------------------------------------------------------------------
-- |
-- Maintainer : bastiaan.heeren@ou.nl
-- Stability : provisional
-- Portability : portable (depends on ghc)
--
-- Options and command-line flags for services
--
-----------------------------------------------------------------------------
module Service.Options where
import System.Environment
import System.Exit
import System.Console.GetOpt
import Service.Revision (version, revision)
import Service.LoggingDatabase (logEnabled)
data Flag = Verbose | Version | Logging Bool | InputFile String
deriving (Show, Eq)
options :: [OptDescr Flag]
options =
[ Option "?" ["version"] (NoArg Version) "show version number"
, Option "l" ["logging"] (NoArg $ Logging True) "enable logging"
, Option [] ["no-logging"] (NoArg $ Logging False) "disable logging (default on local machine)"
, Option "f" ["file"] (ReqArg InputFile "FILE") "input FILE"
]
header :: String
header = "Usage: service [OPTION] (" ++ versionText ++ ", logging " ++
(if logEnabled then "enabled" else "disabled") ++ ")"
versionText :: String
versionText = "version " ++ version ++ ", revision " ++ show revision
serviceOptions :: IO [Flag]
serviceOptions = do
args <- getArgs
case getOpt Permute options args of
(flags, [], []) | Version `notElem` flags ->
return flags
(_, _, errs) -> do
putStrLn (concat errs ++ usageInfo header options)
exitFailure
withLogging :: [Flag] -> Bool
withLogging flags = and [ b | Logging b <- flags ]
withInputFile :: [Flag] -> Maybe String
withInputFile flags =
case [ file | InputFile file <- flags ] of
[hd] -> Just hd
_ -> Nothing