Призматическая / схема требует ключевой зависимости?

#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")))