正在使用提示验证结构字段值的唯一性



我正在使用提示模式来替换现有YAML格式的定制验证代码,该格式看起来像这样:

items:
- name: a
description: something
- name: b
description: other thing

遵循教程可以很容易地完成基础工作:在每个项目上强制执行必需和可选字段,以及它们的类型和值约束。

但是,我想复制的现有验证代码的一个特性是能够强制要求items列表中没有两个条目共享name的相同值。从文档中我不清楚这是否或如何可能通过提示实现。是吗?

(我知道我可以也可能应该在这里使用映射而不是列表,并将名称字段提升为映射中的键,但如果可能的话,我希望避免为了验证代码/工具的利益而更改YAML格式。(

下面是一个我希望验证失败的具体例子(因为namea被重用(:

items:
- name: a
description: something
- name: a
description: other thing

免责声明:我是CUE的新手,可能有更好的解决方案。

我能想到的解决方案是使用一个类似保护的私有变量_uniqueName: true,并利用这样一个事实,即如果我们试图将一个冲突的值分配给同一个变量,CUE将无法通过验证。因此,您可以在首先处理项目列表后,将_uniqueName重新分配给list.UniqueItems的结果。

请参阅https://cuelang.org/play/?id=WZyVeYCEsEM#cue@export@yaml

假设错误消息不是最具描述性的,或者没有向您显示哪个值是重复的,但它通常会满足您的需要/要求。

为了改进一点,您可以将变量重命名为_namesInItemsMustBeUnique

最新更新