From 7097592e644f57c0a7ea7491ac742864c1b2873d Mon Sep 17 00:00:00 2001 From: johndoe6345789 Date: Fri, 9 Jan 2026 20:26:11 +0000 Subject: [PATCH] ROADMAP.md --- .../impl/json_config_schema_path_resolver.cpp | 25 +++++++++++++++++ .../impl/json_config_schema_validator.hpp | 28 +++++++++++++++++++ .../impl/json_config_schema_version.hpp | 7 +++++ 3 files changed, 60 insertions(+) create mode 100644 src/services/impl/json_config_schema_path_resolver.cpp create mode 100644 src/services/impl/json_config_schema_validator.hpp create mode 100644 src/services/impl/json_config_schema_version.hpp diff --git a/src/services/impl/json_config_schema_path_resolver.cpp b/src/services/impl/json_config_schema_path_resolver.cpp new file mode 100644 index 0000000..4acb7e8 --- /dev/null +++ b/src/services/impl/json_config_schema_path_resolver.cpp @@ -0,0 +1,25 @@ +#include "json_config_schema_path_resolver.hpp" + +#include +#include + +namespace sdl3cpp::services::impl::json_config { + +std::filesystem::path JsonConfigSchemaPathResolver::Resolve(const std::filesystem::path& configPath) const { + const std::filesystem::path schemaFile = "runtime_config_v2.schema.json"; + std::vector candidates; + if (!configPath.empty()) { + candidates.push_back(configPath.parent_path() / "schema" / schemaFile); + } + candidates.push_back(std::filesystem::current_path() / "config" / "schema" / schemaFile); + + std::error_code ec; + for (const auto& candidate : candidates) { + if (!candidate.empty() && std::filesystem::exists(candidate, ec)) { + return candidate; + } + } + return {}; +} + +} // namespace sdl3cpp::services::impl::json_config diff --git a/src/services/impl/json_config_schema_validator.hpp b/src/services/impl/json_config_schema_validator.hpp new file mode 100644 index 0000000..2b3dd8e --- /dev/null +++ b/src/services/impl/json_config_schema_validator.hpp @@ -0,0 +1,28 @@ +#pragma once + +#include +#include + +#include + +namespace sdl3cpp::services { +class ILogger; +class IProbeService; +} + +namespace sdl3cpp::services::impl::json_config { + +class JsonConfigSchemaValidator { +public: + JsonConfigSchemaValidator(std::shared_ptr logger, + std::shared_ptr probeService); + + void ValidateOrThrow(const rapidjson::Document& document, + const std::filesystem::path& configPath) const; + +private: + std::shared_ptr logger_; + std::shared_ptr probeService_; +}; + +} // namespace sdl3cpp::services::impl::json_config diff --git a/src/services/impl/json_config_schema_version.hpp b/src/services/impl/json_config_schema_version.hpp new file mode 100644 index 0000000..41cb6f5 --- /dev/null +++ b/src/services/impl/json_config_schema_version.hpp @@ -0,0 +1,7 @@ +#pragma once + +namespace sdl3cpp::services::impl::json_config { + +constexpr int kRuntimeConfigSchemaVersion = 2; + +} // namespace sdl3cpp::services::impl::json_config