载入中...
搜索中...
未找到
SchemaRegistry.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4#include "common/Result.h"
5#include "common/Value.h"
7
8#include <functional>
9#include <string>
10#include <vector>
11
12namespace eve::schema {
13
15using MigrationFunction = std::function<eve::Result<eve::Value>(const eve::Value& input)>;
16
25 std::string schemaId;
26 int fromVersion = 0;
27 int toVersion = 0;
28 std::vector<int> versions;
29
31 [[nodiscard]] bool exact() const noexcept { return versions.size() == 1; }
32};
33
36public:
41 [[nodiscard]] static eve::Result<SchemaRegistrationStatus> registerSchema(const SchemaDefinition& definition);
42
47 [[nodiscard]] static eve::Result<SchemaRegistrationStatus> registerFromJson(const std::string& json);
48
53 [[nodiscard]] static eve::Result<SchemaRegistrationStatus> registerVersioned(const SchemaDefinition& definition);
54
61 [[nodiscard]] static eve::Result<SchemaRegistrationStatus> registerFromJsonVersioned(const std::string& json);
62
75 [[nodiscard]] static const SchemaDefinition* find(const std::string& id);
76
87 [[nodiscard]] static const SchemaDefinition* resolve(const std::string& schemaId, int schemaVersion);
88
93 [[nodiscard]] static std::vector<int> versions(const std::string& schemaId);
94
99 [[nodiscard]] static eve::Result<void> remove(const std::string& id);
100
106 [[nodiscard]] static eve::Result<void> remove(const std::string& id, int schemaVersion);
107
109 static void clear();
110
114 static int count();
115
119 static int versionCount();
120
122 static std::vector<std::string> ids();
123
129 [[nodiscard]] static std::vector<ValidationError> validate(const std::string& schemaId, const std::string& json);
130
132 [[nodiscard]] static std::vector<ValidationError> validate(const std::string& schemaId, int schemaVersion,
133 const std::string& json);
134
146 [[nodiscard]] static eve::Result<void> registerMigration(const std::string& schemaId, int fromVersion,
147 int toVersion, MigrationFunction migration);
148
158 [[nodiscard]] static eve::Result<SchemaCompatibility> queryCompatibility(const std::string& schemaId,
159 int fromVersion, int toVersion);
160
172 [[nodiscard]] static eve::Result<eve::Value> migrate(const std::string& schemaId, int fromVersion, int toVersion,
173 const eve::Value& input);
174
183 [[nodiscard]] static eve::Result<std::string> migrateJson(const std::string& schemaId, int fromVersion,
184 int toVersion, const std::string& json);
185
192 [[nodiscard]] static eve::Result<std::string> generateDocumentation(const std::string& schemaId, int schemaVersion);
193
200 [[nodiscard]] static eve::Result<std::string> generateBindingContract(const std::string& schemaId,
201 int schemaVersion);
202};
203
204} // namespace eve::schema
EvpackChunkInput input
Definition Evpack.cpp:170
#define EVENGINE_API_FOUNDATION_INLINE
仅供"只有内联成员"的类型使用的组宏:拥有者 dllexport,消费方不导入。
Definition Export.h:170
#define EVENGINE_API_FOUNDATION
每个链接组(link group)各自的导出宏。
Definition Export.h:106
glm::uvec4 ids
Move-only, checked operation results for the common layer.
int toVersion
std::uint32_t count
LogicalId definition
Owning, renderer-independent dynamic values.
Move-only operation result carrying either a value or Status.
Definition Result.h:155
The canonical owning dynamic value used by data-facing protocols.
Definition Value.h:31
Process-wide registry for runtime gameplay schemas.
std::function< eve::Result< eve::Value >(const eve::Value &input)> MigrationFunction
One pure transformation from one registered schema version to the next.
The exact compatibility path selected by SchemaRegistry.
bool exact() const noexcept
Whether source and target are the same exact schema version.
Versioned runtime schema for a JSON object.
Definition SchemaTypes.h:93