super-user-spark-0.4.0.0: src/SuperUserSpark/OptParse.hs
module SuperUserSpark.OptParse
( getDispatch
, Dispatch(..)
) where
import Import
import Options.Applicative
import System.Environment (getArgs)
import SuperUserSpark.OptParse.Types
getDispatch :: IO Dispatch
getDispatch = do
args <- getArgs
let result = runOptionsParser args
handleParseResult result
runOptionsParser :: [String] -> ParserResult Dispatch
runOptionsParser strs = execParserPure prefs_ optionsParser strs
where
prefs_ =
ParserPrefs
{ prefMultiSuffix = ""
, prefDisambiguate = True
, prefShowHelpOnError = True
, prefShowHelpOnEmpty = True
, prefBacktrack = True
, prefColumns = 80
}
optionsParser :: ParserInfo Dispatch
optionsParser =
info
(helper <*> parseDispatch)
(fullDesc <> progDesc "Super User Spark, author: Tom Sydney Kerckhove")
parseDispatch :: Parser Dispatch
parseDispatch =
hsubparser $
mconcat
[ command "parse" parseParse
, command "compile" parseCompile
, command "bake" parseBake
, command "diagnose" parseDiagnose
, command "check" parseCheck
, command "deploy" parseDeploy
]
parseParse :: ParserInfo Dispatch
parseParse = info parser modifier
where
parser = DispatchParse <$> parseParseArgs
modifier =
fullDesc <>
progDesc "Parse a spark file and check for syntactic errors."
parseParseArgs :: Parser ParseArgs
parseParseArgs =
ParseArgs <$>
strArgument (mconcat [metavar "FILE", help "the file to parse"])
parseCompile :: ParserInfo Dispatch
parseCompile = info parser modifier
where
parser = DispatchCompile <$> parseCompileArgs
modifier = fullDesc <> progDesc "Compile a spark card."
parseCompileArgs :: Parser CompileArgs
parseCompileArgs =
CompileArgs <$>
strArgument (metavar "CARDREF" <> help "the card file to compile") <*>
option
(Just <$> str)
(mconcat
[ long "output"
, short 'o'
, value Nothing
, metavar "FILE"
, help "The output file for compilation"
]) <*>
parseCompileFlags
parseCompileFlags :: Parser CompileFlags
parseCompileFlags =
CompileFlags <$>
option
(Just <$> str)
(mconcat
[ long "kind"
, short 'k'
, value Nothing
, metavar "KIND"
, help
"The kind specification for unspecified deployments (default: link)"
]) <*>
option
(Just <$> str)
(mconcat
[ long "override"
, short 'O'
, value Nothing
, metavar "KIND"
, help "Override every deployment to be of the given kind"
])
parseBake :: ParserInfo Dispatch
parseBake = info parser modifier
where
parser = DispatchBake <$> parseBakeArgs
modifier = fullDesc <> progDesc "Bake the raw deployment of a spark card."
parseBakeArgs :: Parser BakeArgs
parseBakeArgs =
BakeArgs <$> strArgument (metavar "CARDREF" <> help "the card to bake") <*>
parseBakeFlags
parseBakeFlags :: Parser BakeFlags
parseBakeFlags = BakeFlags <$> parseCompileFlags
parseDiagnose :: ParserInfo Dispatch
parseDiagnose = info parser modifier
where
parser = DispatchDiagnose <$> parseDiagnoseArgs
modifier =
fullDesc <> progDesc "Diagnose the baked deployment of a spark card."
parseDiagnoseArgs :: Parser DiagnoseArgs
parseDiagnoseArgs =
DiagnoseArgs <$>
strArgument (metavar "CARDREF" <> help "the card to diagnose") <*>
parseDiagnoseFlags
parseDiagnoseFlags :: Parser DiagnoseFlags
parseDiagnoseFlags = DiagnoseFlags <$> parseBakeFlags
parseCheck :: ParserInfo Dispatch
parseCheck = info parser modifier
where
parser = DispatchCheck <$> parseCheckArgs
modifier = fullDesc <> progDesc "Check the deployment of a spark card."
parseCheckArgs :: Parser CheckArgs
parseCheckArgs =
CheckArgs <$> strArgument (metavar "CARDREF" <> help "the card to check") <*>
parseCheckFlags
parseCheckFlags :: Parser CheckFlags
parseCheckFlags = CheckFlags <$> parseDiagnoseFlags
parseDeploy :: ParserInfo Dispatch
parseDeploy = info parser modifier
where
parser = DispatchDeploy <$> parseDeployArgs
modifier = fullDesc <> progDesc "Deploy a spark card."
parseDeployArgs :: Parser DeployArgs
parseDeployArgs =
DeployArgs <$> strArgument (metavar "CARDREF" <> help "the card to deploy") <*>
parseDeployFlags
parseDeployFlags :: Parser DeployFlags
parseDeployFlags =
DeployFlags <$>
switch
(mconcat
[ long "replace-links"
, help "Replace links at deploy destinations."
]) <*>
switch
(mconcat
[ long "replace-files"
, help "Replace existing files at deploy destinations."
]) <*>
switch
(mconcat
[ long "replace-Directories"
, help "Replace existing directories at deploy destinations."
]) <*>
switch
(mconcat
[ long "replace-all"
, short 'r'
, help
"Equivalent to --replace-files --replace-directories --replace-links"
]) <*>
parseCheckFlags