#pragma once #include #include #include constexpr const char* globalSchema = "global.json"; constexpr const char* hostConfigurationDirectory = SYSCONF_DIR "configurations"; constexpr const char* configurationDirectory = PACKAGE_DIR "configurations"; constexpr const char* currentConfiguration = "/var/configuration/system.json"; constexpr const char* schemaDirectory = PACKAGE_DIR "schemas"; class Configuration { public: explicit Configuration(); std::unordered_set probeInterfaces; std::vector configurations; private: void loadConfigurations(); void filterProbeInterfaces(); }; bool writeJsonFiles(const nlohmann::json& systemConfiguration); template bool setJsonFromPointer(const std::string& ptrStr, const JsonType& value, nlohmann::json& systemConfiguration) { try { nlohmann::json::json_pointer ptr(ptrStr); nlohmann::json& ref = systemConfiguration[ptr]; ref = value; return true; } catch (const std::out_of_range&) { return false; } } void deriveNewConfiguration(const nlohmann::json& oldConfiguration, nlohmann::json& newConfiguration); bool validateJson(const nlohmann::json& schemaFile, const nlohmann::json& input);