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)