diff options
Diffstat (limited to 'src/command.h')
| -rw-r--r-- | src/command.h | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/command.h b/src/command.h new file mode 100644 index 0000000..8d0679d --- /dev/null +++ b/src/command.h @@ -0,0 +1,48 @@ +#include <iostream> +#include <cstring> +#include <memory> +#include <vector> +#include "package.h" + +namespace katja +{ + class command + { + public: + virtual void execute() const = 0; + }; + + class list final : public command + { + public: + void execute() const override; + }; + + class help final : public command + { + public: + void execute() const override; + }; + + enum class command_exception_t + { + no_command, + too_many_arguments, + unknown_command, + }; + + class command_exception final : public std::exception + { + command_exception_t m_exception_type; + std::vector<std::string> m_failed_arguments; + + public: + explicit command_exception(const command_exception_t exception_type, + std::vector<std::string> failed_arguments = {}) noexcept; + + const char *what() const noexcept override; + const std::vector<std::string>& failed_arguments() const noexcept; + }; + + std::unique_ptr<command> parse_command_line(int argc, char **argv); +} |
