config_defaults.cpp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #include "common/config_defaults.hpp"
  2. namespace smartbotic::common {
  3. nlohmann::json applyConfigDefaults(const nlohmann::json& config,
  4. const nlohmann::json& config_schema) {
  5. nlohmann::json result = config.is_object() ? config : nlohmann::json::object();
  6. if (!config_schema.is_object()) {
  7. return result;
  8. }
  9. auto properties_it = config_schema.find("properties");
  10. if (properties_it == config_schema.end() || !properties_it->is_object()) {
  11. return result;
  12. }
  13. for (auto it = properties_it->begin(); it != properties_it->end(); ++it) {
  14. const std::string& key = it.key();
  15. const nlohmann::json& property_schema = it.value();
  16. if (!property_schema.is_object()) {
  17. continue;
  18. }
  19. auto default_it = property_schema.find("default");
  20. if (default_it == property_schema.end()) {
  21. continue;
  22. }
  23. if (!result.contains(key)) {
  24. result[key] = *default_it;
  25. }
  26. }
  27. return result;
  28. }
  29. } // namespace smartbotic::common