From 51feae338153188048adec1cf9a2825cf8d12ce5 Mon Sep 17 00:00:00 2001 From: Nathan Hughes Date: Thu, 14 Mar 2024 18:13:58 -0400 Subject: [PATCH] add more error information when parsing virtual configs and treat empty type differently (#8) Co-authored-by: Nathan Hughes --- .../include/config_utilities/factory.h | 14 ++++++++------ .../include/config_utilities/virtual_config.h | 6 ++++++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/config_utilities/include/config_utilities/factory.h b/config_utilities/include/config_utilities/factory.h index 6955fb1..054c865 100644 --- a/config_utilities/include/config_utilities/factory.h +++ b/config_utilities/include/config_utilities/factory.h @@ -119,13 +119,15 @@ struct ModuleMapBase { return false; } if (map.find(type) == map.end()) { - std::string module_list; - for (const auto& entry : map) { - module_list.append(entry.first + "', '"); + if (!type.empty()) { + std::string module_list; + for (const auto& entry : map) { + module_list.append(entry.first + "', '"); + } + module_list = module_list.substr(0, module_list.size() - 4); + Logger::logError("No module of type '" + type + "' registered to the factory for " + type_info + + ". Registered are: '" + module_list + "'."); } - module_list = module_list.substr(0, module_list.size() - 4); - Logger::logError("No module of type '" + type + "' registered to the factory for " + type_info + - ". Registered are: '" + module_list + "'."); return false; } return true; diff --git a/config_utilities/include/config_utilities/virtual_config.h b/config_utilities/include/config_utilities/virtual_config.h index ce79c77..736db36 100644 --- a/config_utilities/include/config_utilities/virtual_config.h +++ b/config_utilities/include/config_utilities/virtual_config.h @@ -111,6 +111,8 @@ class VirtualConfig { */ void setOptional(bool optional = true) { optional_ = optional; } + bool optional() const { return optional_; } + /** * @brief Get the string-identifier-type of the config stored in the virtual config. */ @@ -166,6 +168,10 @@ void declare_config(VirtualConfig& config) { : internal::getType(*data, type); if (success) { config.config_ = internal::ConfigFactory::create(type); + } else if (!config.optional_) { + std::stringstream ss; + ss << "Could not get type for '" << internal::typeInfo() << "'"; + internal::Logger::logError(ss.str()); } }