#clojure #plumatic-schema #compojure-api
#clojure #plumatic-схема #compojure-api
Вопрос:
Я использую plumatic / schema с моим compojure-api для проверки входных данных для конечной точки.
У меня есть два ключа в моей схеме: Field1
amp; Field2
. Я хочу иметь возможность определить правило для моей схемы, которое, например, гласит:
WHEN Field1 = "AA"
THEN Field2 is required-key
ELSE Field2 is optional-key
Но, похоже, я могу только установить для ключа значение require или optional. Возможно ли сделать ключ зависимым от другого ключа?
(schema/def Field1
(schema/enum "AA" "BB"))
(schema/def Field2
(schema/enum "AAAA" "BBBB" "CCCC"))
(schema/defschema MySchema
{(schema/required-key :field1) Field1
; Here I want some kind of logic to make the key required if
(if (= Field1 "AA")
(schema/required-key :field2) Field2
(schema/optional-key :field) Field2)
})
Ответ №1:
(use '[plumbing.core])
(schema/defschema MySchema
(schema/conditional
(fn-> :field1 (= "AA"))
(schema/schema-with-name {(schema/required-key :field1) Field1
(schema/required-key :field2) Field2} "cond1")
:else
(schema/schema-with-name {(schema/required-key :field1) Field1
(schema/optional-key :field2) Field2} "cond2")))