1 #ifndef INICPP_OPTION_SCHEMA_H 2 #define INICPP_OPTION_SCHEMA_H 10 #include "exception.h" 31 option_item
type = option_item::single;
53 std::function<bool(ArgType)> validator =
nullptr;
72 std::unique_ptr<option_schema_params_base> params_;
74 template <
typename ValueType>
75 std::unique_ptr<option_schema_params_base> copy_schema(
const std::unique_ptr<option_schema_params_base> &opt)
79 auto new_schema_value = std::make_unique<option_schema_params<ValueType>>(*ptr);
80 return std::move(new_schema_value);
87 void validate_option_items(
option &opt)
const;
89 template <
typename ValueType>
90 void validate_typed_option_items(
const std::vector<ValueType> &items,
const std::string &option_name)
const 92 for (
const auto &item : items) {
100 void parse_option_items(
option &opt)
const;
102 template <
typename ValueType>
103 std::vector<ValueType> parse_typed_option_items(
const std::vector<std::string> &items,
104 std::function<ValueType(
const std::string &,
const std::string &)>
parser,
105 const std::string &option_name)
const 107 std::vector<ValueType> typed_items;
108 for (
const auto &item : items) {
109 typed_items.push_back(
parser(item, option_name));
143 type_ = get_option_enum_type<ArgType>();
144 if (type_ == option_type::invalid_e) {
148 params_ = std::make_unique<option_schema_params<ArgType>>(arguments);
155 const std::string &get_name()
const;
160 option_type get_type()
const;
165 bool is_list()
const;
170 const std::string &get_default_value()
const;
175 bool is_mandatory()
const;
180 const std::string &get_comment()
const;
187 void validate_option(
option &opt)
const;
195 std::ostream &write_additional_info(std::ostream &os)
const;
202 INICPP_API
friend std::ostream &operator<<(std::ostream &os,
const option_schema &opt_schema);
205 INICPP_API std::ostream &operator<<(std::ostream &os,
const option_schema &opt_schema);
std::string default_value
item_requirement requirement
std::function< bool(ArgType)> validator
option_schema(const option_schema_params< ArgType > &arguments)