RADLib
RADical C++ application framework
RADCLI.h
Go to the documentation of this file.
1 #ifndef RADCLI_H
2 #define RADCLI_H
3 
9 #pragma once
10 
11 #include <RADCore/RADCore.h>
12 
13 #include <map>
14 #include <optional>
15 #include <string>
16 #include <vector>
17 
18 namespace RADCLI {
19 
21  struct Option {
23  std::string name;
25  char shortName = '\0';
27  std::string description;
29  bool requiresValue = false;
31  bool required = false;
33  std::string defaultValue;
34  };
35 
37  class ParseResult {
38  public:
40  bool ok() const;
42  const std::string& error() const;
44  bool has(const std::string& name) const;
46  std::string value(const std::string& name, const std::string& defaultValue = {}) const;
48  const std::vector<std::string>& positionals() const;
49 
50  private:
51  friend class CommandLineParser;
52  bool ok_ = true;
53  std::string error_;
54  std::map<std::string, std::string> values_;
55  std::vector<std::string> present_;
56  std::vector<std::string> positionals_;
57  };
58 
61  public:
63  explicit CommandLineParser(std::string applicationName = {});
65  void setDescription(std::string description);
67  void addOption(Option option);
69  ParseResult parse(int argc, char** argv) const;
71  ParseResult parse(const std::vector<std::string>& args) const;
73  std::string helpText() const;
74 
75  private:
76  const Option* findLong(const std::string& name) const;
77  const Option* findShort(char shortName) const;
78 
79  std::string applicationName_;
80  std::string description_;
81  std::vector<Option> options_;
82  };
83 
85  std::optional<std::string> environmentVariable(const std::string& name);
87  bool setEnvironmentVariable(const std::string& name, const std::string& value, bool overwrite = true);
89  std::string executablePath();
91  std::string currentUserName();
93  std::string radlibVersionString();
94 
95 } // namespace RADCLI
96 
97 #endif
Small command-line parser for RADLib tools and examples.
Definition: RADCLI.h:60
void addOption(Option option)
Adds an option.
ParseResult parse(int argc, char **argv) const
Parses argc/argv.
std::string helpText() const
Builds help text.
void setDescription(std::string description)
Sets a short application description.
CommandLineParser(std::string applicationName={})
Creates a parser for applicationName.
ParseResult parse(const std::vector< std::string > &args) const
Parses vector arguments where args[0] is the program name.
Parsed command-line result.
Definition: RADCLI.h:37
bool has(const std::string &name) const
Returns true when option was explicitly provided.
bool ok() const
Returns true when parsing succeeded.
std::string value(const std::string &name, const std::string &defaultValue={}) const
Returns option value or defaultValue.
const std::vector< std::string > & positionals() const
Returns positional arguments.
const std::string & error() const
Returns parser error text.
Definition: RADCLI.h:18
std::string executablePath()
Returns the current executable path when available.
std::string currentUserName()
Returns the current username when available.
std::string radlibVersionString()
Returns the RADLib version string.
bool setEnvironmentVariable(const std::string &name, const std::string &value, bool overwrite=true)
Sets or unsets an environment variable.
std::optional< std::string > environmentVariable(const std::string &name)
Returns an environment variable value when present.
One command-line option definition.
Definition: RADCLI.h:21
std::string defaultValue
Default value used when absent.
Definition: RADCLI.h:33
std::string name
Long option name without "--".
Definition: RADCLI.h:23
char shortName
Optional short option character without "-".
Definition: RADCLI.h:25
std::string description
Human-readable help text.
Definition: RADCLI.h:27
bool requiresValue
True when this option requires a value.
Definition: RADCLI.h:29
bool required
True when this option must be provided.
Definition: RADCLI.h:31