Поскольку вы определили ::uuid
как ненулевое значение, вы не можете использовать клавишу ::uuid
для нулевого значения в карте / наборе ключей.Это намеренно - квалифицированные ключи в спецификации определены глобально.
В этом случае вы можете указать спецификацию ::uuid
как nillable, а затем ограничить ненулевую версию набора ключей:
(s/def ::uuid (s/nilable uuid?))
(s/def ::problem-spec (s/and (s/keys :req-un [::uuid])
#(some? (:uuid %))))
(s/def ::nilable-problem-spec (s/keys :req-un [::uuid])) ;; as previously
В качестве альтернативы, поскольку вы имеете дело с неквалифицированными ключами на картах, вы также можете определить два разных квалифицированных ключа uuid
с различной семантикой:
(s/def :nillable/uuid (s/nilable uuid?))
(s/def :non.nil/uuid uuid?)
(s/def ::problem-spec (s/keys :req-un [:non.nil/uuid])))
(s/def ::nilable-problem-spec (s/keys :req-un [:nillable/uuid]))