blob: f7f0b3149aaa8b89a3ea847e87072517b647e814 [file] [log] [blame]
#pragma once
#include <nlohmann/json.hpp>
#include <unordered_set>
#include <vector>
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<std::string> probeInterfaces;
std::vector<nlohmann::json> configurations;
private:
void loadConfigurations();
void filterProbeInterfaces();
};
bool writeJsonFiles(const nlohmann::json& systemConfiguration);
template <typename JsonType>
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);