packages feed

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)