module CmdLine where import Options.Applicative data CmdLine = CmdLine { mode :: Mode } data Mode = Test | Graphviz GraphvizOpts | Replay ReplayOpts data GraphvizOpts = GraphvizOpts { graphvizLogFile :: FilePath , graphvizShowHashes :: Bool } data ReplayOpts = ReplayOpts { replayLogFile :: FilePath } parseCmdLine :: Parser CmdLine parseCmdLine = CmdLine <$> parseMode parseMode :: Parser Mode parseMode = (Graphviz <$> parsegraphviz) <|> (Replay <$> parsereplay) <|> pure Test where parsegraphviz = GraphvizOpts <$> option str ( long "graphviz" <> metavar "logfile" <> help "visualize log file with graphviz" ) <*> switch ( long "show-hashes" <> help "display hashes in graphviz" ) parsereplay = ReplayOpts <$> option str ( long "replay" <> metavar "logfile" <> help "replay log file" ) getCmdLine :: IO CmdLine getCmdLine = execParser opts where opts = info (helper <*> parseCmdLine) ( fullDesc <> header "debug-me - provable remote debugging sessions" )