mirror of
https://github.com/CLIUtils/CLI11.git
synced 2026-01-19 04:52:08 +00:00
Rework some of the validator locations, add documentation, and fix some lingering issues with validators. The extra will will enable additions of some new validators and reduce compile times for those that are not needed. --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
52 lines
1.5 KiB
C++
52 lines
1.5 KiB
C++
// Copyright (c) 2017-2025, University of Cincinnati, developed by Henry Schreiner
|
|
// under NSF AWARD 1414736 and by the respective contributors.
|
|
// All rights reserved.
|
|
//
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
#define CLI11_ENABLE_EXTRA_VALIDATORS 1
|
|
#include <CLI/CLI.hpp>
|
|
#include <iostream>
|
|
#include <map>
|
|
#include <string>
|
|
|
|
enum class Level : int { High, Medium, Low };
|
|
|
|
// Defining operator<<() for your enum class (in this case for 'Level') overrides CLI11's enum streaming
|
|
inline std::ostream &operator<<(std::ostream &os, const Level &level) {
|
|
switch(level) {
|
|
case Level::High:
|
|
os << "High";
|
|
break;
|
|
case Level::Medium:
|
|
os << "Medium";
|
|
break;
|
|
case Level::Low:
|
|
os << "Low";
|
|
break;
|
|
}
|
|
os << " (ft rom custom ostream)";
|
|
return os;
|
|
}
|
|
|
|
int main(int argc, char **argv) {
|
|
CLI::App app;
|
|
|
|
Level level{Level::Low};
|
|
// specify string->value mappings
|
|
std::map<std::string, Level> map{{"high", Level::High}, {"medium", Level::Medium}, {"low", Level::Low}};
|
|
// CheckedTransformer translates and checks whether the results are either in one of the strings or in one of the
|
|
// translations already
|
|
app.add_option("-l,--level", level, "Level settings")
|
|
->required()
|
|
->transform(CLI::CheckedTransformer(map, CLI::ignore_case));
|
|
|
|
CLI11_PARSE(app, argc, argv);
|
|
|
|
// CLI11's built in enum streaming can be used outside CLI11 like this:
|
|
using CLI::enums::operator<<;
|
|
std::cout << "Enum received: " << level << '\n';
|
|
|
|
return 0;
|
|
}
|