$mermaidjs
CLI11 2.7.2
C++11 Command Line Interface Parser
Loading...
Searching...
No Matches
ConfigFwd.hpp
1// Copyright (c) 2017-2026, University of Cincinnati, developed by Henry Schreiner
2// under NSF AWARD 1414736 and by the respective contributors.
3// All rights reserved.
4//
5// SPDX-License-Identifier: BSD-3-Clause
6
7#pragma once
8
9// IWYU pragma: private, include "CLI/CLI.hpp"
10
11// [CLI11:public_includes:set]
12#include <cstdint>
13#include <iosfwd>
14#include <string>
15#include <vector>
16// [CLI11:public_includes:end]
17#include "Error.hpp"
18#include "StringTools.hpp"
19
20namespace CLI {
21// [CLI11:config_fwd_hpp:verbatim]
22
23class App;
24
26enum class ConfigOutputMode : std::uint8_t { Active = 0, AllDefaults, ActiveSubcommandDefaults };
27
29struct ConfigItem {
31 std::vector<std::string> parents{};
32
34 std::string name{};
36 std::vector<std::string> inputs{};
38 bool multiline{false};
40 CLI11_NODISCARD std::string fullname() const;
41};
42
44class Config {
45 protected:
46 std::vector<ConfigItem> items{};
47
48 public:
50 virtual std::string to_config(const App *, bool, bool, std::string) const = 0;
51
53 virtual std::string
54 to_config(const App *app, ConfigOutputMode mode, bool write_description, std::string prefix) const;
55
57 virtual std::vector<ConfigItem> from_config(std::istream &) const = 0;
58
60 CLI11_NODISCARD virtual std::string to_flag(const ConfigItem &item) const;
61
63 CLI11_NODISCARD std::vector<ConfigItem> from_file(const std::string &name) const;
64
66 virtual ~Config() = default;
67};
68
70class ConfigBase : public Config {
71 protected:
73 char commentChar = '#';
75 char arrayStart = '[';
77 char arrayEnd = ']';
79 char arraySeparator = ',';
81 char valueDelimiter = '=';
83 char stringQuote = '"';
85 char literalQuote = '\'';
87 std::uint8_t maximumLayers{255};
91 bool commentDefaultsBool = false;
95 int16_t configIndex{-1};
97 std::string configSection{};
98
99 public:
100 std::string
101 to_config(const App * /*app*/, ConfigOutputMode mode, bool write_description, std::string prefix) const override;
102
103 std::string
104 to_config(const App * /*app*/, bool default_also, bool write_description, std::string prefix) const override;
105
106 std::vector<ConfigItem> from_config(std::istream &input) const override;
108 ConfigBase *comment(char cchar) {
109 commentChar = cchar;
110 return this;
111 }
112
113 ConfigBase *arrayBounds(char aStart, char aEnd) {
114 arrayStart = aStart;
115 arrayEnd = aEnd;
116 return this;
117 }
118
120 arraySeparator = aSep;
121 return this;
122 }
123
125 valueDelimiter = vSep;
126 return this;
127 }
128
129 ConfigBase *quoteCharacter(char qString, char literalChar) {
130 stringQuote = qString;
131 literalQuote = literalChar;
132 return this;
133 }
134
135 ConfigBase *maxLayers(uint8_t layers) {
136 maximumLayers = layers;
137 return this;
138 }
139
142 return this;
143 }
144
145 ConfigBase *commentDefaults(bool comDef = true) {
146 commentDefaultsBool = comDef;
147 return this;
148 }
149
150 std::string &sectionRef() { return configSection; }
152 CLI11_NODISCARD const std::string &section() const { return configSection; }
154 ConfigBase *section(const std::string &sectionName) {
155 configSection = sectionName;
156 return this;
157 }
158
160 int16_t &indexRef() { return configIndex; }
162 CLI11_NODISCARD int16_t index() const { return configIndex; }
164 ConfigBase *index(int16_t sectionIndex) {
165 configIndex = sectionIndex;
166 return this;
167 }
168
169 ConfigBase *allowDuplicateFields(bool value = true) {
171 return this;
172 }
173};
174
176using ConfigTOML = ConfigBase;
177
179class ConfigINI : public ConfigTOML {
180
181 public:
182 ConfigINI();
183};
184// [CLI11:config_fwd_hpp:end]
185} // namespace CLI
Creates a command line program, with very few defaults.
Definition App.hpp:115
This converter works with INI/TOML files; to write INI files use ConfigINI.
Definition ConfigFwd.hpp:70
std::string configSection
Specify the configuration section that should be used.
Definition ConfigFwd.hpp:97
ConfigBase * comment(char cchar)
Specify the configuration for comment characters.
Definition ConfigFwd.hpp:108
ConfigBase * arrayDelimiter(char aSep)
Specify the delimiter character for an array.
Definition ConfigFwd.hpp:119
ConfigBase * quoteCharacter(char qString, char literalChar)
Specify the quote characters used around strings and literal strings.
Definition ConfigFwd.hpp:129
std::string to_config(const App *, ConfigOutputMode mode, bool write_description, std::string prefix) const override
Convert an app into a configuration.
Definition Config_inl.hpp:594
char arraySeparator
the character used to separate elements in an array
Definition ConfigFwd.hpp:79
std::string & sectionRef()
get a reference to the configuration section
Definition ConfigFwd.hpp:150
ConfigBase * arrayBounds(char aStart, char aEnd)
Specify the start and end characters for an array.
Definition ConfigFwd.hpp:113
ConfigBase * maxLayers(uint8_t layers)
Specify the maximum number of parents.
Definition ConfigFwd.hpp:135
ConfigBase * allowDuplicateFields(bool value=true)
specify that multiple duplicate arguments should be merged even if not sequential
Definition ConfigFwd.hpp:169
CLI11_NODISCARD const std::string & section() const
get the section
Definition ConfigFwd.hpp:152
std::vector< ConfigItem > from_config(std::istream &input) const override
Convert a configuration into an app.
Definition Config_inl.hpp:301
std::uint8_t maximumLayers
the maximum number of layers to allow
Definition ConfigFwd.hpp:87
ConfigBase * commentDefaults(bool comDef=true)
comment default value options
Definition ConfigFwd.hpp:145
char stringQuote
the character to use around strings
Definition ConfigFwd.hpp:83
ConfigBase * section(const std::string &sectionName)
specify a particular section of the configuration file to use
Definition ConfigFwd.hpp:154
ConfigBase * valueSeparator(char vSep)
Specify the delimiter between a name and value.
Definition ConfigFwd.hpp:124
char valueDelimiter
the character used separate the name from the value
Definition ConfigFwd.hpp:81
char arrayStart
the character used to start an array '\0' is a default to not use
Definition ConfigFwd.hpp:75
char parentSeparatorChar
the separator used to separator parent layers
Definition ConfigFwd.hpp:89
bool allowMultipleDuplicateFields
specify the config reader should collapse repeated field names to a single vector
Definition ConfigFwd.hpp:93
CLI11_NODISCARD int16_t index() const
get the section index
Definition ConfigFwd.hpp:162
char literalQuote
the character to use around single characters and literal strings
Definition ConfigFwd.hpp:85
ConfigBase * index(int16_t sectionIndex)
specify a particular index in the section to use (-1) for all sections to use
Definition ConfigFwd.hpp:164
int16_t & indexRef()
get a reference to the configuration index
Definition ConfigFwd.hpp:160
char arrayEnd
the character used to end an array '\0' is a default to not use
Definition ConfigFwd.hpp:77
ConfigBase * parentSeparator(char sep)
Specify the separator to use for parent layers.
Definition ConfigFwd.hpp:140
bool commentDefaultsBool
comment default values
Definition ConfigFwd.hpp:91
int16_t configIndex
Specify the configuration index to use for arrayed sections.
Definition ConfigFwd.hpp:95
char commentChar
the character used for comments
Definition ConfigFwd.hpp:73
This class provides a converter for configuration files.
Definition ConfigFwd.hpp:44
virtual CLI11_NODISCARD std::string to_flag(const ConfigItem &item) const
Get a flag value.
Definition Config_inl.hpp:45
virtual std::string to_config(const App *, bool, bool, std::string) const =0
Convert an app into a configuration.
CLI11_NODISCARD std::vector< ConfigItem > from_file(const std::string &name) const
Parse a config file, throw an error (ParseError:ConfigParseError or FileError) on failure.
Definition Config_inl.hpp:55
virtual ~Config()=default
Virtual destructor.
virtual std::vector< ConfigItem > from_config(std::istream &) const =0
Convert a configuration into an app.
Holds values to load into Options.
Definition ConfigFwd.hpp:29
CLI11_NODISCARD std::string fullname() const
The list of parents and name joined by ".".
Definition Config_inl.hpp:33
std::vector< std::string > inputs
Listing of inputs.
Definition ConfigFwd.hpp:36
std::string name
This is the name.
Definition ConfigFwd.hpp:34
bool multiline
indicator if a multiline vector separator was inserted
Definition ConfigFwd.hpp:38
std::vector< std::string > parents
This is the list of parents.
Definition ConfigFwd.hpp:31