// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
namespace GFramework.Game.Config;
///
/// 表示一个数组节点上声明的元素数量、去重与 contains 匹配计数约束。
/// 该模型与标量约束拆分保存,避免数组节点继续共享不适用的标量字段。
///
internal sealed class YamlConfigArrayConstraints
{
///
/// 初始化数组约束模型。
///
/// 最小元素数量约束。
/// 最大元素数量约束。
/// 是否要求数组元素唯一。
/// 数组 contains 约束;未声明时为空。
/// 当 或 为负数时抛出。
/// 当 大于 时抛出。
public YamlConfigArrayConstraints(
int? minItems,
int? maxItems,
bool uniqueItems,
YamlConfigArrayContainsConstraints? containsConstraints)
{
if (minItems is < 0)
{
throw new ArgumentOutOfRangeException(nameof(minItems), minItems, "minItems 不能为负数。");
}
if (maxItems is < 0)
{
throw new ArgumentOutOfRangeException(nameof(maxItems), maxItems, "maxItems 不能为负数。");
}
if (minItems.HasValue &&
maxItems.HasValue &&
minItems.Value > maxItems.Value)
{
throw new ArgumentException("minItems 不能大于 maxItems。", nameof(minItems));
}
MinItems = minItems;
MaxItems = maxItems;
UniqueItems = uniqueItems;
ContainsConstraints = containsConstraints;
}
///
/// 获取最小元素数量约束。
///
public int? MinItems { get; }
///
/// 获取最大元素数量约束。
///
public int? MaxItems { get; }
///
/// 获取是否要求数组元素唯一。
///
public bool UniqueItems { get; }
///
/// 获取数组 contains 约束;未声明时返回空。
///
public YamlConfigArrayContainsConstraints? ContainsConstraints { get; }
}