summaryrefslogtreecommitdiff
path: root/src/command.h
blob: 8d0679dbc6680c846ac1e74d93e9ad5352fd23af (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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);
}