backwards compat bool options from enum options with allowing some string variants

This commit is contained in:
thecozies 2025-09-09 13:38:46 -05:00
parent d46ed007a5
commit 995cdf2ad4
3 changed files with 34 additions and 1 deletions

View file

@ -15,6 +15,9 @@
namespace recomp {
namespace config {
bool check_config_option_bool_string(const std::string& str);
enum class ConfigOptionType {
None,
Enum,

View file

@ -485,6 +485,10 @@ ConfigValueVariant Config::parse_config_option_json_value(const nlohmann::json&
return std::get<ConfigOptionBool>(option.variant).default_value;
break;
}
if (json_value.is_string()) {
std::string str_val = json_value.get<std::string>();
return check_config_option_bool_string(str_val);
}
return json_value.get<bool>();
}
}
@ -662,7 +666,7 @@ std::string Config::get_enum_option_details(size_t option_index) const {
if (!enum_option_details.contains(option_index)) {
return std::string();
}
return enum_option_details[option_index];
return enum_option_details.at(option_index);
}
bool Config::is_config_option_hidden(size_t option_index) const {

View file

@ -20,6 +20,32 @@ static bool case_insensitive_compare(const std::string& a, const std::string& b)
}
namespace recomp::config {
bool check_config_option_bool_string(const std::string& str) {
static const std::string false_strings[] = {
"false",
"off",
"no",
};
static const std::string true_strings[] = {
"true",
"on",
"yes",
};
for (const auto& false_str : false_strings) {
if (case_insensitive_compare(str, false_str)) {
return false;
}
}
for (const auto& true_str : true_strings) {
if (case_insensitive_compare(str, true_str)) {
return true;
}
}
return false;
}
// ConfigOptionEnum
std::vector<ConfigOptionEnumOption>::const_iterator ConfigOptionEnum::find_option_from_string(const std::string& option_key) const {