summaryrefslogtreecommitdiff
path: root/src/mongo/util/options_parser/option_description.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/util/options_parser/option_description.h')
-rw-r--r--src/mongo/util/options_parser/option_description.h376
1 files changed, 188 insertions, 188 deletions
diff --git a/src/mongo/util/options_parser/option_description.h b/src/mongo/util/options_parser/option_description.h
index b126df402f6..73d4106a527 100644
--- a/src/mongo/util/options_parser/option_description.h
+++ b/src/mongo/util/options_parser/option_description.h
@@ -36,200 +36,200 @@
namespace mongo {
namespace optionenvironment {
+/**
+ * An OptionType is an enum of all the types we support in the OptionsParser
+ *
+ * NOTE(sverch): The semantics of "Switch" options are completely identical to "Bool" options,
+ * except that on the command line they do not take a value.
+ */
+enum OptionType {
+ StringVector, // po::value< std::vector<std::string> >
+ StringMap, // po::value< std::vector<std::string> > (but in "key=value" format)
+ Bool, // po::value<bool>
+ Double, // po::value<double>
+ Int, // po::value<int>
+ Long, // po::value<long>
+ String, // po::value<std::string>
+ UnsignedLongLong, // po::value<unsigned long long>
+ Unsigned, // po::value<unsigned>
+ Switch // po::bool_switch
+};
+
+/**
+ * An OptionSources is an enum representing where an option can come from
+ */
+enum OptionSources {
+ SourceCommandLine = 1,
+ SourceINIConfig = 2,
+ SourceYAMLConfig = 4,
+ SourceAllConfig = SourceINIConfig | SourceYAMLConfig,
+ SourceAllLegacy = SourceINIConfig | SourceCommandLine,
+ SourceAll = SourceCommandLine | SourceINIConfig | SourceYAMLConfig
+};
+
+/**
+ * The OptionDescription class is a container for information about the options we are expecting
+ * either on the command line or in config files. These should be registered in an
+ * OptionSection instance and passed to an OptionsParser.
+ */
+class OptionDescription {
+public:
+ OptionDescription(const std::string& dottedName,
+ const std::string& singleName,
+ const OptionType type,
+ const std::string& description);
+
+ OptionDescription(const std::string& dottedName,
+ const std::string& singleName,
+ const OptionType type,
+ const std::string& description,
+ const std::vector<std::string>& deprecatedDottedNames);
+
+ /*
+ * The following functions are part of the chaining interface for option registration. See
+ * comments below for what each of these attributes mean, and the OptionSection class for
+ * more details on the chaining interface.
+ */
+
/**
- * An OptionType is an enum of all the types we support in the OptionsParser
+ * Parsing Attributes.
+ *
+ * The functions below specify various attributes of our option that are relevant for
+ * parsing.
+ */
+
+ /*
+ * Make this option hidden so it does not appear in command line help
+ */
+ OptionDescription& hidden();
+
+ /*
+ * Add a default value for this option if it is not specified
+ *
+ * throws DBException on errors, such as trying to set a default that does not have the same
+ * type as the option, or trying to set a default for a composing option.
+ */
+ OptionDescription& setDefault(Value defaultValue);
+
+ /*
+ * Add an implicit value for this option if it is specified with no argument
+ *
+ * throws DBException on errors, such as trying to set an implicit value that does not have
+ * the same type as the option, or trying to set an implicit value for a composing option.
+ */
+ OptionDescription& setImplicit(Value implicitValue);
+
+ /*
+ * Make this option composing so that the different sources add their values instead of
+ * overriding (eg. setParameter values in the config file and on the command line all get
+ * aggregated together)
*
- * NOTE(sverch): The semantics of "Switch" options are completely identical to "Bool" options,
- * except that on the command line they do not take a value.
+ * throws DBException on errors, such as trying to make an option that is not a vector type
+ * composing, or or trying to set an implicit or default value for a composing option.
+ */
+ OptionDescription& composing();
+
+ /*
+ * Specify the allowed sources for this option, such as CommandLine, JSONConfig, or
+ * INIConfig. The default is SourceAll which means the option can be present in any source
+ */
+ OptionDescription& setSources(OptionSources sources);
+
+ /*
+ * Specify that this is a positional option. "start" should be the first position the
+ * option can be found in, and "end" is the last position, inclusive. The positions start
+ * at index 1 (after the executable name). If "start" is greater than "end", then the
+ * option must be able to support multiple values. Specifying -1 for the "end" means that
+ * the option can repeat forever. Any "holes" in the positional ranges will result in an
+ * error during parsing.
+ *
+ * Examples:
+ *
+ * .positional(1,1) // Single positional argument at position 1
+ * ...
+ * .positional(2,3) // More positional arguments at position 2 and 3 (multivalued option)
+ * ...
+ * .positional(4,-1) // Can repeat this positional option forever after position 4
+ *
+ *
+ * (sverch) TODO: When we can support it (i.e. when we can get rid of boost) add a
+ * "positionalOnly" attribute that specifies that it is not also a command line flag. In
+ * boost program options, the only way to have a positional argument is to register a flag
+ * and mark it as also being positional.
+ */
+ OptionDescription& positional(int start, int end);
+
+ /**
+ * Validation Constraints.
+ *
+ * The functions below specify constraints that must be met in order for this option to be
+ * valid. These do not get checked during parsing, but will be added to the result
+ * Environment so that they will get checked when the Environment is validated.
*/
- enum OptionType {
- StringVector, // po::value< std::vector<std::string> >
- StringMap, // po::value< std::vector<std::string> > (but in "key=value" format)
- Bool, // po::value<bool>
- Double, // po::value<double>
- Int, // po::value<int>
- Long, // po::value<long>
- String, // po::value<std::string>
- UnsignedLongLong, // po::value<unsigned long long>
- Unsigned, // po::value<unsigned>
- Switch // po::bool_switch
- };
/**
- * An OptionSources is an enum representing where an option can come from
+ * Specifies the range allowed for this option. Only allowed for options with numeric type.
*/
- enum OptionSources {
- SourceCommandLine = 1,
- SourceINIConfig = 2,
- SourceYAMLConfig = 4,
- SourceAllConfig = SourceINIConfig | SourceYAMLConfig,
- SourceAllLegacy = SourceINIConfig | SourceCommandLine,
- SourceAll = SourceCommandLine | SourceINIConfig | SourceYAMLConfig
- };
+ OptionDescription& validRange(long min, long max);
/**
- * The OptionDescription class is a container for information about the options we are expecting
- * either on the command line or in config files. These should be registered in an
- * OptionSection instance and passed to an OptionsParser.
+ * Specifies that this option is incompatible with another option. The std::string provided must
+ * be the dottedName, which is the name used to access the option in the result Environment.
+ *
+ * TODO: Find a way to check that that option actually exists in our section somewhere.
+ */
+ OptionDescription& incompatibleWith(const std::string& otherDottedName);
+
+ /**
+ * Specifies that this option is requires another option to be specified. The string
+ * provided must be the dottedName, which is the name used to access the option in the
+ * result Environment.
+ */
+ OptionDescription& requires(const std::string& otherDottedName);
+
+ /**
+ * Specifies that this option is required to match the given format, specified as a regular
+ * expression. The displayFormat argument is what gets printed to the user in the case
+ * where this constraint is not satisfied. This is only allowed on std::string options.
+ */
+ OptionDescription& format(const std::string& regexFormat, const std::string& displayFormat);
+
+ /**
+ * Adds a constraint for this option. During parsing, this Constraint will be added to the
+ * result Environment, ensuring that it will get checked when the environment is validated.
+ * See the documentation on the Constraint and Environment classes for more details.
+ *
+ * WARNING: This function takes ownership of the Constraint pointer that is passed in.
*/
- class OptionDescription {
- public:
- OptionDescription(const std::string& dottedName,
- const std::string& singleName,
- const OptionType type,
- const std::string& description);
-
- OptionDescription(const std::string& dottedName,
- const std::string& singleName,
- const OptionType type,
- const std::string& description,
- const std::vector<std::string>& deprecatedDottedNames);
-
- /*
- * The following functions are part of the chaining interface for option registration. See
- * comments below for what each of these attributes mean, and the OptionSection class for
- * more details on the chaining interface.
- */
-
- /**
- * Parsing Attributes.
- *
- * The functions below specify various attributes of our option that are relevant for
- * parsing.
- */
-
- /*
- * Make this option hidden so it does not appear in command line help
- */
- OptionDescription& hidden();
-
- /*
- * Add a default value for this option if it is not specified
- *
- * throws DBException on errors, such as trying to set a default that does not have the same
- * type as the option, or trying to set a default for a composing option.
- */
- OptionDescription& setDefault(Value defaultValue);
-
- /*
- * Add an implicit value for this option if it is specified with no argument
- *
- * throws DBException on errors, such as trying to set an implicit value that does not have
- * the same type as the option, or trying to set an implicit value for a composing option.
- */
- OptionDescription& setImplicit(Value implicitValue);
-
- /*
- * Make this option composing so that the different sources add their values instead of
- * overriding (eg. setParameter values in the config file and on the command line all get
- * aggregated together)
- *
- * throws DBException on errors, such as trying to make an option that is not a vector type
- * composing, or or trying to set an implicit or default value for a composing option.
- */
- OptionDescription& composing();
-
- /*
- * Specify the allowed sources for this option, such as CommandLine, JSONConfig, or
- * INIConfig. The default is SourceAll which means the option can be present in any source
- */
- OptionDescription& setSources(OptionSources sources);
-
- /*
- * Specify that this is a positional option. "start" should be the first position the
- * option can be found in, and "end" is the last position, inclusive. The positions start
- * at index 1 (after the executable name). If "start" is greater than "end", then the
- * option must be able to support multiple values. Specifying -1 for the "end" means that
- * the option can repeat forever. Any "holes" in the positional ranges will result in an
- * error during parsing.
- *
- * Examples:
- *
- * .positional(1,1) // Single positional argument at position 1
- * ...
- * .positional(2,3) // More positional arguments at position 2 and 3 (multivalued option)
- * ...
- * .positional(4,-1) // Can repeat this positional option forever after position 4
- *
- *
- * (sverch) TODO: When we can support it (i.e. when we can get rid of boost) add a
- * "positionalOnly" attribute that specifies that it is not also a command line flag. In
- * boost program options, the only way to have a positional argument is to register a flag
- * and mark it as also being positional.
- */
- OptionDescription& positional(int start, int end);
-
- /**
- * Validation Constraints.
- *
- * The functions below specify constraints that must be met in order for this option to be
- * valid. These do not get checked during parsing, but will be added to the result
- * Environment so that they will get checked when the Environment is validated.
- */
-
- /**
- * Specifies the range allowed for this option. Only allowed for options with numeric type.
- */
- OptionDescription& validRange(long min, long max);
-
- /**
- * Specifies that this option is incompatible with another option. The std::string provided must
- * be the dottedName, which is the name used to access the option in the result Environment.
- *
- * TODO: Find a way to check that that option actually exists in our section somewhere.
- */
- OptionDescription& incompatibleWith(const std::string& otherDottedName);
-
- /**
- * Specifies that this option is requires another option to be specified. The string
- * provided must be the dottedName, which is the name used to access the option in the
- * result Environment.
- */
- OptionDescription& requires(const std::string& otherDottedName);
-
- /**
- * Specifies that this option is required to match the given format, specified as a regular
- * expression. The displayFormat argument is what gets printed to the user in the case
- * where this constraint is not satisfied. This is only allowed on std::string options.
- */
- OptionDescription& format(const std::string& regexFormat, const std::string& displayFormat);
-
- /**
- * Adds a constraint for this option. During parsing, this Constraint will be added to the
- * result Environment, ensuring that it will get checked when the environment is validated.
- * See the documentation on the Constraint and Environment classes for more details.
- *
- * WARNING: This function takes ownership of the Constraint pointer that is passed in.
- */
- OptionDescription& addConstraint(Constraint* c);
-
- std::string _dottedName; // Used for JSON config and in Environment
- std::string _singleName; // Used for boost command line and INI
- OptionType _type; // Storage type of the argument value, or switch type (bool)
- // (required by boost)
- std::string _description; // Description of option printed in help output
- bool _isVisible; // Visible in help output
- Value _default; // Value if option is not specified
- Value _implicit; // Value if option is specified with no argument
- bool _isComposing; // Aggregate values from different sources instead of overriding
- OptionSources _sources; // Places where an option can be specified (current sources are
- // command line, json config, and ini config)
- int _positionalStart; // The starting position if this is a positional option. -1 otherwise.
- int _positionalEnd; // The ending position if this is a positional option. -1 if unlimited.
-
- // TODO(sverch): We have to use pointers to keep track of the Constrants because we rely on
- // inheritance to make Constraints work. We have to use shared_ptrs because the
- // OptionDescription is sometimes copied and because it is stored in a std::list in the
- // OptionSection. We should think about a better solution for the ownership semantics of
- // these classes. Note that the Environment (the storage for results of option parsing) has
- // to know about the constraints for all the options, which is another factor to consider
- // when thinking about ownership.
- std::vector<std::shared_ptr<Constraint> > _constraints; // Constraints that must be met
- // for this option to be valid
-
- // Deprecated dotted names - aliases for '_dottedName'.
- std::vector<std::string> _deprecatedDottedNames;
- };
-
-} // namespace optionenvironment
-} // namespace mongo
+ OptionDescription& addConstraint(Constraint* c);
+
+ std::string _dottedName; // Used for JSON config and in Environment
+ std::string _singleName; // Used for boost command line and INI
+ OptionType _type; // Storage type of the argument value, or switch type (bool)
+ // (required by boost)
+ std::string _description; // Description of option printed in help output
+ bool _isVisible; // Visible in help output
+ Value _default; // Value if option is not specified
+ Value _implicit; // Value if option is specified with no argument
+ bool _isComposing; // Aggregate values from different sources instead of overriding
+ OptionSources _sources; // Places where an option can be specified (current sources are
+ // command line, json config, and ini config)
+ int _positionalStart; // The starting position if this is a positional option. -1 otherwise.
+ int _positionalEnd; // The ending position if this is a positional option. -1 if unlimited.
+
+ // TODO(sverch): We have to use pointers to keep track of the Constrants because we rely on
+ // inheritance to make Constraints work. We have to use shared_ptrs because the
+ // OptionDescription is sometimes copied and because it is stored in a std::list in the
+ // OptionSection. We should think about a better solution for the ownership semantics of
+ // these classes. Note that the Environment (the storage for results of option parsing) has
+ // to know about the constraints for all the options, which is another factor to consider
+ // when thinking about ownership.
+ std::vector<std::shared_ptr<Constraint>> _constraints; // Constraints that must be met
+ // for this option to be valid
+
+ // Deprecated dotted names - aliases for '_dottedName'.
+ std::vector<std::string> _deprecatedDottedNames;
+};
+
+} // namespace optionenvironment
+} // namespace mongo