diff --git a/src/configmanager_priv.h b/src/configmanager_priv.h index b81c610..8da6d4d 100644 --- a/src/configmanager_priv.h +++ b/src/configmanager_priv.h @@ -111,12 +111,14 @@ esp_err_t ConfigManager::init(const char *ns) before = espchrono::millis_clock::now(); bool success = true; - for (ConfigWrapperInterface &config : ConfigContainer::getAllConfigParams()) + ConfigContainer::callForEveryConfig([&](ConfigWrapperInterface &config){ if (const auto result = config.loadFromFlash(nvs_handle_user); !result) { ESP_LOGE(TAG, "config parameter %s failed to load: %.*s", config.nvsName(), result.error().size(), result.error().data()); success = false; } + return false; // dont abort the loop + }); after = espchrono::millis_clock::now(); @@ -146,13 +148,15 @@ ConfigStatusReturnType ConfigManager::reset() std::string message; - for (ConfigWrapperInterface &config : ConfigContainer::getAllConfigParams()) + ConfigContainer::callForEveryConfig([&](ConfigWrapperInterface &config){ if (const auto result = reset_config(config); !result) { if (!message.empty()) message.append(", "); message.append(fmt::format("reset of {} failed: {}", config.nvsName(), result.error())); } + return false; // dont abort loop + }); if (!message.empty()) return tl::make_unexpected(std::move(message)); @@ -163,10 +167,16 @@ ConfigStatusReturnType ConfigManager::reset() template ConfigWrapperInterface *ConfigManager::findConfigByKey(std::string_view key) { - const auto configParams = ConfigContainer::getAllConfigParams(); - const auto iter = std::find_if(std::cbegin(configParams), std::cend(configParams), - [&key](const ConfigWrapperInterface &config){ return key == config.nvsName(); }); - return iter != std::cend(configParams) ? &iter->get() : nullptr; + ConfigWrapperInterface *result{}; + ConfigContainer::callForEveryConfig([&](ConfigWrapperInterface &config){ + if (key == config.nvsName()) + { + result = &config; + return true; // abort the loop + } + return false; // dont abort loop + }); + return result; } } // namespace espconfig