Common System 0.2.0
Common interfaces and patterns for system integration
Loading...
Searching...
No Matches
kcenon::common::config::CliConfigParser Class Referenceexport

Simple command-line argument parser. More...

Collaboration diagram for kcenon::common::config::CliConfigParser:
Collaboration graph

Public Member Functions

 CliConfigParser ()=default
 
void add_option (const cli_option &opt)
 Add an option definition.
 
cli_parse_result parse (int argc, const char *const *argv) const
 Parse command-line arguments.
 

Private Attributes

std::vector< cli_optionoptions_
 

Detailed Description

Simple command-line argument parser.

Definition at line 154 of file config.cppm.

Constructor & Destructor Documentation

◆ CliConfigParser()

kcenon::common::config::CliConfigParser::CliConfigParser ( )
exportdefault

Member Function Documentation

◆ add_option()

void kcenon::common::config::CliConfigParser::add_option ( const cli_option & opt)
inlineexport

Add an option definition.

Definition at line 161 of file config.cppm.

161 {
162 options_.push_back(opt);
163 }
std::vector< cli_option > options_
Definition config.cppm:212

References options_.

◆ parse()

cli_parse_result kcenon::common::config::CliConfigParser::parse ( int argc,
const char *const * argv ) const
inlineexport

Parse command-line arguments.

Definition at line 168 of file config.cppm.

168 {
169 cli_parse_result result;
170
171 for (int i = 1; i < argc; ++i) {
172 std::string arg = argv[i];
173
174 if (arg.starts_with("--")) {
175 std::string name = arg.substr(2);
176 auto eq_pos = name.find('=');
177 if (eq_pos != std::string::npos) {
178 result.options[name.substr(0, eq_pos)] = name.substr(eq_pos + 1);
179 } else if (i + 1 < argc && argv[i + 1][0] != '-') {
180 result.options[name] = argv[++i];
181 } else {
182 result.options[name] = "true";
183 }
184 } else if (arg.starts_with("-") && arg.size() == 2) {
185 std::string short_name = arg.substr(1);
186 for (const auto& opt : options_) {
187 if (opt.short_name == short_name) {
188 if (opt.takes_value && i + 1 < argc) {
189 result.options[opt.name] = argv[++i];
190 } else {
191 result.options[opt.name] = "true";
192 }
193 break;
194 }
195 }
196 } else {
197 result.positional_args.push_back(arg);
198 }
199 }
200
201 // Check required options
202 for (const auto& opt : options_) {
203 if (opt.required && !result.has_option(opt.name)) {
204 result.errors.push_back("Missing required option: " + opt.name);
205 }
206 }
207
208 return result;
209 }

References kcenon::common::config::cli_parse_result::errors, kcenon::common::config::cli_parse_result::has_option(), kcenon::common::config::cli_parse_result::options, options_, and kcenon::common::config::cli_parse_result::positional_args.

Here is the call graph for this function:

Member Data Documentation

◆ options_

std::vector<cli_option> kcenon::common::config::CliConfigParser::options_
exportprivate

Definition at line 212 of file config.cppm.

Referenced by add_option(), and parse().


The documentation for this class was generated from the following file: