#ifndef DYNAMIC_PROGRAM_COMMAND_LINE_INTERFACE_H #define DYNAMIC_PROGRAM_COMMAND_LINE_INTERFACE_H #include #include #include "game_state.h" namespace Hanabi { enum class GameStateSpecType { turn = 0, draw_pile_size = 1, }; struct CLIParms { std::variant game {}; boost::optional score_goal {}; GameStateSpecType game_state_spec_type { GameStateSpecType::draw_pile_size }; unsigned game_state_spec { 5 }; boost::optional interactive {}; bool quiet { false }; // If this holds std::monostate, then all clue numbers are evaluated std::variant clue_spec {static_cast(0)}; bool recursive { false }; }; std::ostream & quiet_ostream(bool quiet); constexpr int download_failed = 1; constexpr int state_unreachable = 2; std::optional parse_parms(int argc, char *argv[]); int run_cli(CLIParms parms); } #endif //DYNAMIC_PROGRAM_COMMAND_LINE_INTERFACE_H