GeWuYou 3bca6390ce feat(config): 添加JSON schema配置生成器
- 实现了根据JSON schema自动生成配置类型和配置表包装的功能
- 支持嵌套对象、对象数组、标量数组的类型生成
- 提供可映射的default/enum/ref-table元数据支持
- 生成强类型的配置表包装器和运行时绑定辅助类
- 实现了完整的schema解析和C#代码生成功能
- 添加了详细的XML文档注释和错误诊断功能
2026-04-03 09:53:51 +08:00

90 lines
3.6 KiB
Plaintext

// <auto-generated />
#nullable enable
namespace GFramework.Game.Config.Generated;
/// <summary>
/// Auto-generated registration and lookup helpers for schema file 'monster.schema.json'.
/// The helper centralizes table naming, config directory, schema path, and strongly-typed registry access so consumer projects do not need to duplicate the same conventions.
/// </summary>
public static class MonsterConfigBindings
{
/// <summary>
/// Gets the runtime registration name of the generated config table.
/// </summary>
public const string TableName = "monster";
/// <summary>
/// Gets the config directory path expected by the generated registration helper.
/// </summary>
public const string ConfigRelativePath = "monster";
/// <summary>
/// Gets the schema file path expected by the generated registration helper.
/// </summary>
public const string SchemaRelativePath = "schemas/monster.schema.json";
/// <summary>
/// Registers the generated config table using the schema-derived runtime conventions.
/// </summary>
/// <param name="loader">The target YAML config loader.</param>
/// <param name="comparer">Optional key comparer for the generated table registration.</param>
/// <returns>The same loader instance so registration can keep chaining.</returns>
public static global::GFramework.Game.Config.YamlConfigLoader RegisterMonsterTable(
this global::GFramework.Game.Config.YamlConfigLoader loader,
global::System.Collections.Generic.IEqualityComparer<int>? comparer = null)
{
if (loader is null)
{
throw new global::System.ArgumentNullException(nameof(loader));
}
return loader.RegisterTable<int, MonsterConfig>(
TableName,
ConfigRelativePath,
SchemaRelativePath,
static config => config.Id,
comparer);
}
/// <summary>
/// Gets the generated config table wrapper from the registry.
/// </summary>
/// <param name="registry">The source config registry.</param>
/// <returns>The generated strongly-typed table wrapper.</returns>
/// <exception cref="global::System.ArgumentNullException">When <paramref name="registry"/> is null.</exception>
public static MonsterTable GetMonsterTable(this global::GFramework.Game.Abstractions.Config.IConfigRegistry registry)
{
if (registry is null)
{
throw new global::System.ArgumentNullException(nameof(registry));
}
return new MonsterTable(registry.GetTable<int, MonsterConfig>(TableName));
}
/// <summary>
/// Tries to get the generated config table wrapper from the registry.
/// </summary>
/// <param name="registry">The source config registry.</param>
/// <param name="table">The generated strongly-typed table wrapper when lookup succeeds; otherwise null.</param>
/// <returns>True when the generated table is registered and type-compatible; otherwise false.</returns>
/// <exception cref="global::System.ArgumentNullException">When <paramref name="registry"/> is null.</exception>
public static bool TryGetMonsterTable(this global::GFramework.Game.Abstractions.Config.IConfigRegistry registry, out MonsterTable? table)
{
if (registry is null)
{
throw new global::System.ArgumentNullException(nameof(registry));
}
if (registry.TryGetTable<int, MonsterConfig>(TableName, out var innerTable) && innerTable is not null)
{
table = new MonsterTable(innerTable);
return true;
}
table = null;
return false;
}
}