From 995cdf2ad4bf10d988aa950ce016176a7eb4a1e1 Mon Sep 17 00:00:00 2001 From: thecozies <79979276+thecozies@users.noreply.github.com> Date: Tue, 9 Sep 2025 13:38:46 -0500 Subject: [PATCH] backwards compat bool options from enum options with allowing some string variants --- librecomp/include/librecomp/config.hpp | 3 +++ librecomp/src/config.cpp | 6 +++++- librecomp/src/config_option.cpp | 26 ++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/librecomp/include/librecomp/config.hpp b/librecomp/include/librecomp/config.hpp index 5b5edab..9727a55 100644 --- a/librecomp/include/librecomp/config.hpp +++ b/librecomp/include/librecomp/config.hpp @@ -15,6 +15,9 @@ namespace recomp { namespace config { + + bool check_config_option_bool_string(const std::string& str); + enum class ConfigOptionType { None, Enum, diff --git a/librecomp/src/config.cpp b/librecomp/src/config.cpp index 7a7d852..f86cde1 100644 --- a/librecomp/src/config.cpp +++ b/librecomp/src/config.cpp @@ -485,6 +485,10 @@ ConfigValueVariant Config::parse_config_option_json_value(const nlohmann::json& return std::get(option.variant).default_value; break; } + if (json_value.is_string()) { + std::string str_val = json_value.get(); + return check_config_option_bool_string(str_val); + } return json_value.get(); } } @@ -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 { diff --git a/librecomp/src/config_option.cpp b/librecomp/src/config_option.cpp index 17174d1..0773833 100644 --- a/librecomp/src/config_option.cpp +++ b/librecomp/src/config_option.cpp @@ -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::const_iterator ConfigOptionEnum::find_option_from_string(const std::string& option_key) const {