module CommonCLI(TypeOpts(..), unflag, tyOptParser) where import Data.Monoid ((<>)) import Options.Applicative import System.Process (system) import qualified System.Environment (lookupEnv) import System.Exit (ExitCode) import Data.Aeson.AutoType.CodeGen (Lang(..)) data TypeOpts = TyOptions { autounify :: Bool , toplevel :: String , debug :: Bool , test :: Bool , suggest :: Bool , lang :: Lang } unflag :: Mod FlagFields Bool -> Parser Bool unflag = flag True False tyOptParser :: Parser TypeOpts tyOptParser = TyOptions <$> unflag (long "no-autounify" <> help "Do not automatically unify suggested candidates") <*> strOption (short 't' <> long "toplevel" <> value "TopLevel" <> help "Name for toplevel data type") <*> switch (long "debug" <> help "Set this flag to see more debugging info" ) <*> unflag (long "no-test" <> help "Do not run generated parser afterwards" ) <*> unflag (long "no-suggest" <> help "Do not suggest candidates for unification" ) <*> langOpts langOpts :: Parser Lang langOpts = flag Haskell Haskell (long "haskell") <|> flag Haskell Elm (long "elm")