#include "../include/query.hpp" template <> Query::Query(const std::string &query) : _query(std::move(query)) {} template <> Query::Query(const std::string &query, char *list) : _query(std::move(query)), _list(std::move(list)) {} template <> Query::Query(const std::string &query, char *list) : _query(std::move(query)), _list(std::move(list)) {} /*template OUTPUT Query::execute() { switch (_qf) { case BOOL: return _bool(); case STRING: return _string(); case INT: return _int(); default: throw ExceptionHandler(CUSTOM_ERROR, "No flag set for query."); } }*/ template <> bool Query::execute(const rapidjson::Document &cfg) const { char in; do { std::cout << _query << " [Y/n] "; std::cin.get(in); switch (in) { case 'N': case 'n': std::cin.ignore(std::numeric_limits::max(), '\n'); return false; case 'Y': case 'y': std::cin.ignore(std::numeric_limits::max(), '\n'); case '\n': return true; default: std::cin.clear(); std::cin.ignore(std::numeric_limits::max(), '\n'); std::cerr << "ERROR: \"" << in << "\" is not a valid input!\n"; } } while (true); } template <> std::string Query::execute(const rapidjson::Document &cfg) const { std::string input; do { std::cout << _query << " [enter q to quit]" << "\n"; std::cin.clear(); std::cout << ">>> "; std::getline(std::cin, input); if (input == "q" || input == "q\n") { exit(0); } for (rapidjson::SizeType i = 0; i < cfg[_list].Size(); i++) { if (input == cfg[_list][i].GetString()) { return std::move(input); } } std::cout << "Error! \"" << input << "\" not found in " << _list << " list!" << "\n"; } while (true); } template <> int Query::execute(const rapidjson::Document &cfg) const { char input; int output; do { std::cout << "\n" << _query; for (rapidjson::SizeType i = 0; i < cfg[_list].Size(); i++) { std::cout << " [" << (i+1) << "] " << cfg[_list][i]["name"].GetString(); } std::cout << " [press q to exit]" << "\n"; std::cout << ">>> "; std::cin.get(input); output = input - '0'; if (input == 'q') { exit(0); } if (output < 1 || output > static_cast(cfg[_list].Size())) { std::cout << "Error! \"" << input << "\" is not a valid input." << "\n"; } std::cin.clear(); std::cin.ignore(std::numeric_limits::max(), '\n'); } while (output < 1 || output > static_cast(cfg[_list].Size())); return output; }