hspec-1.8.0: hspec-discover/src/Config.hs
module Config (
Config (..)
, defaultConfig
, parseConfig
, usage
) where
import System.Console.GetOpt
data Config = Config {
configNested :: Bool
, configFormatter :: Maybe String
} deriving (Eq, Show)
defaultConfig :: Config
defaultConfig = Config False Nothing
options :: [OptDescr (Config -> Config)]
options = [
Option [] ["nested"] (NoArg $ \c -> c {configNested = True}) ""
, Option [] ["formatter"] (ReqArg (\s c -> c {configFormatter = Just s}) "FORMATTER") ""
]
usage :: String -> String
usage prog = "\nUsage: " ++ prog ++ " SRC CUR DST [--formatter=FORMATTER]\n"
parseConfig :: String -> [String] -> Either String Config
parseConfig prog args = case getOpt Permute options args of
(opts, [], []) -> Right (foldl (flip id) defaultConfig opts)
(_, _, err:_) -> formatError err
(_, arg:_, _) -> formatError ("unexpected argument `" ++ arg ++ "'\n")
where
formatError err = Left (prog ++ ": " ++ err ++ usage prog)