namespace GFramework.Game.Config;
///
/// 表示数组节点声明的 contains 匹配约束。
/// 该模型把 contains 子 schema 与匹配数量边界聚合在一起,避免数组节点再额外散落多组相关成员。
///
internal sealed class YamlConfigArrayContainsConstraints
{
///
/// 初始化数组 contains 约束模型。
///
/// contains 子 schema。
/// 最小匹配数量;为 时按 JSON Schema 语义默认 1。
/// 最大匹配数量。
/// 当 为 时抛出。
/// 当 或 为负数时抛出。
/// 当 大于 时抛出。
public YamlConfigArrayContainsConstraints(
YamlConfigSchemaNode containsNode,
int? minContains,
int? maxContains)
{
ArgumentNullException.ThrowIfNull(containsNode);
if (minContains is < 0)
{
throw new ArgumentOutOfRangeException(nameof(minContains), minContains, "minContains 不能为负数。");
}
if (maxContains is < 0)
{
throw new ArgumentOutOfRangeException(nameof(maxContains), maxContains, "maxContains 不能为负数。");
}
if (minContains.HasValue &&
maxContains.HasValue &&
minContains.Value > maxContains.Value)
{
throw new ArgumentException("minContains 不能大于 maxContains。", nameof(minContains));
}
ContainsNode = containsNode;
MinContains = minContains;
MaxContains = maxContains;
}
///
/// 获取 contains 子 schema。
///
public YamlConfigSchemaNode ContainsNode { get; }
///
/// 获取最小匹配数量;未显式声明时返回空,由调用方按默认值 1 解释。
///
public int? MinContains { get; }
///
/// 获取最大匹配数量。
///
public int? MaxContains { get; }
}