koutil
Loading...
Searching...
No Matches
parser.h
Go to the documentation of this file.
1#ifndef KOUTIL_ARGS_PARSER_H
2#define KOUTIL_ARGS_PARSER_H
3
8#include <cstdint>
9#include <iostream>
10#include <span>
11#include <string_view>
12#include <utility>
13
16
17namespace koutil::args {
18
24template <extends_result Result = result_base_t> class parser_t {
25public:
26 using result_t = Result;
30
36 parser_t(std::string_view name, std::string_view description);
37
43
48 [[nodiscard]] std::string_view name() const { return m_main_command.name(); }
49
54 [[nodiscard]] std::string_view description() const { return m_main_command.description(); }
55
61 bool add_command(command_t&& command);
62
68 bool add_option(const option_t& option);
69
74 void add_argument(const argument_t& argument);
75
82 result_t parse(const char* const* args, std::uint32_t argc);
83
89 result_t parse(std::span<const char* const> args);
90
96 void show_help(std::ostream& out = std::cout, std::size_t terminal_size = 80) const {
97 m_main_command.show_help(out, terminal_size);
98 }
99
104
105private:
106 std::string_view m_version;
108};
109
110template <extends_result Result>
112 : m_main_command(std::move(cmd)) { }
113
114template <extends_result Result>
115parser_t<Result>::parser_t(std::string_view name, std::string_view description)
116 : m_main_command(name, description) { }
117
118template <extends_result Result> bool parser_t<Result>::add_command(command_t&& command) {
119 return m_main_command.add_command(std::move(command));
120}
121
122template <extends_result Result> bool parser_t<Result>::add_option(const option_t& option) {
123 return m_main_command.add_option(option);
124}
125
126template <extends_result Result> void parser_t<Result>::add_argument(const argument_t& argument) {
127 m_main_command.add_argument(argument);
128}
129
130template <extends_result Result> Result parser_t<Result>::parse(const char* const* args, std::uint32_t argc) {
131 return parse(std::span<const char* const>(args, argc));
132}
133
134template <extends_result Result> Result parser_t<Result>::parse(std::span<const char* const> args) {
135 result_t result;
136 m_main_command.process(args, result);
137
138 return result;
139}
140
141}
142
143#endif
Represents a positional command-line argument.
Definition argument.h:18
void clear_used()
Clears state.
Definition command_impl.h:246
std::string_view description() const
Gets the command description.
Definition command.h:76
std::string_view name() const
Gets the command name.
Definition command.h:70
void show_help(std::ostream &out, std::size_t terminal_size=80) const
Displays help text for this command.
Definition command_impl.h:240
Represents a command-line option.
Definition option.h:41
Command-line parser.
Definition parser.h:24
std::string_view m_version
Definition parser.h:106
void add_argument(const argument_t &argument)
Adds a positional argument.
Definition parser.h:126
void show_help(std::ostream &out=std::cout, std::size_t terminal_size=80) const
Displays help text.
Definition parser.h:96
bool add_command(command_t &&command)
Adds a subcommand.
Definition parser.h:118
argument_t< result_t > argument_t
Definition parser.h:29
parser_t(std::string_view name, std::string_view description)
Constructs a parser with a name and description.
Definition parser.h:115
Result result_t
Definition parser.h:26
bool add_option(const option_t &option)
Adds an option to the parser.
Definition parser.h:122
void clear_used()
Clears state.
Definition parser.h:103
std::string_view name() const
Gets the parser name.
Definition parser.h:48
option_t< result_t > option_t
Definition parser.h:28
command_t m_main_command
Definition parser.h:107
std::string_view description() const
Gets the parser description.
Definition parser.h:54
result_t parse(const char *const *args, std::uint32_t argc)
Parses command-line arguments.
Definition parser.h:130
Definition argument.h:9