module Coolbal.Options ( Options(..), BuildOptions(..), RunOptions(..), optionParser, ) where import Options.Applicative data Options = Build BuildOptions | Rebuild BuildOptions | Clean | Configure | Run RunOptions deriving (Show) data BuildOptions = BuildOptions (Maybe String) deriving (Show) data RunOptions = RunOptions (Maybe String) [String] deriving (Show) optionParser :: ParserInfo Options optionParser = info (root <**> helper) (fullDesc <> header "coolbal - Faster cabal for common cases" <> progDesc "Some simple Haskell projects don't need all the complexity of \ \Cabal's re-configuration logic. Coolbal can take an already-built \ \Cabal project and rebuild it as long as you don't change the \ \configuration too much, and as long as you don't use too-special \ \Cabal features. Always check that coolbal gives you the expected \ \result.") root :: Parser Options root = hsubparser ( command "build" (info (Build <$> buildOptions) (progDesc "Build the project")) <> command "rebuild" (info (Rebuild <$> buildOptions) (progDesc "Rebuild after deleting compilation artifacts for this project")) <> command "run" (info (Run <$> runOptions) (progDesc "Run an executable from the project")) <> command "clean" (info (pure Clean) (progDesc "Clean coolbal's files for this project")) <> command "configure" (info (pure Configure) (progDesc "Initialise coolbal for this project"))) buildOptions :: Parser BuildOptions buildOptions = BuildOptions <$> optional (argument str (metavar "TARGET")) runOptions :: Parser RunOptions runOptions = RunOptions <$> optional (argument str (metavar "TARGET")) <*> many (argument str (metavar "ARGS..."))