// Copyright 2022, FOSS-VG Developers and Contributers // // This program is free software: you can redistribute it and/or modify it // under the terms of the GNU Affero General Public License as published // by the Free Software Foundation, version 3. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied // warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. // See the GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // version 3 along with this program. // If not, see https://www.gnu.org/licenses/agpl-3.0.en.html #pragma once #include #include #include #include "error.hpp" namespace CLI { struct Flag { char shortName; std::string longName; // used for automatic usage generation std::string description; bool present; Flag(); Flag(char shortName, std::string longName, std::string description); }; struct Option { char shortName; std::string longName; // used for automatic usage generation std::string description; std::string placeholder; // the "COUNT" in "ping [-c ] " bool present; std::string value; Option(); Option(char shortName, std::string longName, std::string placeholder, std::string description); }; struct Argument { // used for automatic usage generation std::string description; std::string placeholder; // the "HOST" in "ping [-c ] " bool present; std::string value; Argument(); Argument(std::string placeholder, std::string description); }; class ArgumentsParser { private: std::map flagsByShortName; std::map flagsByLongName; std::map optionsByShortName; std::map optionsByLongName; std::vector arguments; std::string description; std::string additionalInfo; public: std::string programName; bool wrongUsage; std::vector wrongUsageMessages; // using int here bc that's how main() is defined ArgumentsParser(int argc, const char* const argv[], std::vector flags, std::vector