GFramework/GFramework.Game/Config/YamlConfigTextValidator.cs
GeWuYou 1fac276437 feat(config): 添加YAML配置文件的JSON Schema校验功能
- 实现了YAML配置与JSON Schema的运行时校验能力
- 支持嵌套对象、对象数组、标量数组的递归校验
- 提供async和sync两种模式的schema文件加载解析
- 实现跨表引用的收集与校验机制
- 支持enum枚举值、引用约束和深层约束校验
- 添加了multipleOf、uniqueItems、contains等高级校验功能
- 实现了minProperties、maxProperties对象属性数量校验
- 提供详细的错误诊断信息和路径定位功能
2026-04-12 14:06:06 +08:00

45 lines
1.8 KiB
C#

namespace GFramework.Game.Config;
/// <summary>
/// 提供面向宿主的 YAML 文本校验入口,使保存前校验可以复用运行时同一套 schema 规则。
/// </summary>
public static class YamlConfigTextValidator
{
/// <summary>
/// 使用指定 schema 文件同步校验 YAML 文本。
/// </summary>
/// <param name="tableName">所属配置表名称。</param>
/// <param name="schemaPath">Schema 文件绝对路径。</param>
/// <param name="yamlPath">YAML 文件路径,仅用于诊断信息。</param>
/// <param name="yamlText">待校验的 YAML 文本。</param>
public static void Validate(
string tableName,
string schemaPath,
string yamlPath,
string yamlText)
{
var schema = YamlConfigSchemaValidator.Load(tableName, schemaPath);
YamlConfigSchemaValidator.Validate(tableName, schema, yamlPath, yamlText);
}
/// <summary>
/// 使用指定 schema 文件异步校验 YAML 文本。
/// </summary>
/// <param name="tableName">所属配置表名称。</param>
/// <param name="schemaPath">Schema 文件绝对路径。</param>
/// <param name="yamlPath">YAML 文件路径,仅用于诊断信息。</param>
/// <param name="yamlText">待校验的 YAML 文本。</param>
/// <param name="cancellationToken">取消令牌。</param>
public static async Task ValidateAsync(
string tableName,
string schemaPath,
string yamlPath,
string yamlText,
CancellationToken cancellationToken = default)
{
var schema = await YamlConfigSchemaValidator.LoadAsync(tableName, schemaPath, cancellationToken)
.ConfigureAwait(false);
YamlConfigSchemaValidator.Validate(tableName, schema, yamlPath, yamlText);
}
}