hesql-0.7: HESQL/Options.hs
module HESQL.Options where
import System.Console.GetOpt
data Options = Options
{ optDBLastArg :: Bool
, optHelp :: Bool
, optCatalogFile :: Maybe FilePath
, optDatabase :: Maybe String
} deriving Show
defaultOptions :: Options
defaultOptions =
Options
{
optDBLastArg = False
, optCatalogFile = Nothing
, optDatabase = Nothing
, optHelp = False
}
options :: [OptDescr (Options -> Options)]
options =
[ Option ['l'] ["lastarg"]
(NoArg (\opts -> opts { optDBLastArg = True }))
"db is last argument in all generated functions"
, Option ['c'] ["catalog"]
((ReqArg (\ c opts -> opts { optCatalogFile = Just c })) "FILE")
"validate against catalog file (TODO)"
, Option ['d'] ["database"]
((ReqArg (\ db opts -> opts { optDatabase = Just db })) "DATABASE")
"validate against online database (TODO)"
, Option ['h'] ["help"]
(NoArg (\opts -> opts { optHelp = True }))
"show usage"
]
getOpts :: [String] -> Either String (Options, [String])
getOpts argv =
case getOpt Permute options argv of
(o, n, [])
| null n -> usage []
| otherwise ->
let opts = foldl (flip id) defaultOptions o in
if optHelp opts
then usage []
else Right (opts, n)
(_, _, errs) -> usage errs
where header = "Usage: hesql [OPTION...] file ..."
usage errs = Left (concat errs ++ usageInfo header options)