Ale*_*lin 6 validation schema input clojure
假设我从外部世界收到一些输入,我有以下架构:
(def my-schema
{(s/optional-key :foo) Bool
(s/optional-key :baz) Bool
(s/optional-key :bar) Bool})
Run Code Online (Sandbox Code Playgroud)
有了上述内容,我正在验证的地图中可能存在或缺少所有键或没有键,这是有道理的.但是,如果我想确保其中至少有一个存在,该怎么办?
在Schema验证了上述内容后,我当然可以执行额外的单独检查,并确保密钥计数> = 1,但我很好奇是否有一种方法可以在Schema定义中强制执行.
思考?
您可以在模式中指定您想要的任何谓词:
(def my-schema
(s/both
(s/pred (complement empty) 'not-empty)
{(s/optional-key :foo) Bool
(s/optional-key :baz) Bool
(s/optional-key :bar) Bool}))
Run Code Online (Sandbox Code Playgroud)
如果您询问如何仅使用内置谓词来验证地图,您可以编写:
(def my-schema
(s/both
{(s/optional-key :foo) Bool
(s/optional-key :baz) Bool
(s/optional-key :bar) Bool}
(s/either
{:foo Bool s/Any s/Any}
{:baz Bool s/Any s/Any}
{:bar Bool s/Any s/Any})))
Run Code Online (Sandbox Code Playgroud)
pred这非常丑陋,而且比示例更冗长
| 归档时间: |
|
| 查看次数: |
633 次 |
| 最近记录: |