Я хочу написать спецификацию для карты, которая либо имеет ключ :rule/children
, либо имеет два ключа - :condition/field
и :condition/predicate
. Вот что я пробовал:
(s/keys :req [(s/or :children :rule/children :condition (s/and :condition/field :condition/predicate))])
Это приводит к сообщению об ошибке:
Caused by: java.lang.AssertionError: Assert failed: all keys must be namespace-qualified keywords
(every? (fn* [p1__1917#] (c/and (keyword? p1__1917#) (namespace p1__1917#))) (concat req-keys req-un-specs opt opt-un))
Я знаю, что для s/or
каждый путь должен быть назван. Здесь есть два пути - эта карта может иметь :children
или :condition
. Это условие, только если оно имеет две клавиши :condition/field
и :condition/predicate
.