#include #include #include "common.hpp" namespace kel { namespace sch { using namespace saw::schema; using CmdArgs = Args< Struct< >, Tuple<> >; } saw::error_or kel_main(int argc, char** argv){ saw::data args_d; { saw::data args_data{argc, argv}; saw::codec args_codec; auto eov = args_codec.decode(args_data, args_d); if(eov.is_error()){ return eov; } } saw::data cmd_data; { // Parse from file } bool running = true; while(running){ std::array buffer; std::cin.getline(&buffer[0],buffer.size()); if(std::cin.bad()){ return saw::make_error("unrecoverable stdin error"); } if(std::cin.fail()){ return saw::make_error("stdin format error or line too long"); } if(std::cin.eof()){ return saw::make_error("stdin EOF"); } const std::string_view cmd{buffer.data()}; { auto eov = print_cmd_options(); if(eov.is_error()){ return eov; } } if(cmd == "q" or cmd == "quit"){ running = false; std::cout<<"Quitting..."; }else { uint16_t cmd_id{}; auto res = std::from_chars(cmd.data(), cmd.data() + cmd.size(), cmd_id); if(res.ec == std::errc{} and res.ptr == (cmd.data() + cmd.size())){ auto eov = execute_command_group(cmd_data, cmd_id); if(eov.is_error()){ return eov; } }else{ std::cout<<"Failed to parse input as uint16\nRepeat input..."<