如何解决棱柱/模式需要键依赖性吗?
我将plumatic/schema与compojure-api一起使用,以验证端点的输入。
我的架构中有两个键:Field1
和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)
})
解决方法
(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")))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。