我有一个验证传入数据内容的规范定义。由于数据是字段映射,因此我spec/keys
用于验证它。例如:
(def person-data {:name "Jon Doe", :age 30})
(s/def ::name string?)
(s/def ::age pos-int?)
(s/def ::person-info (s/keys :req-un [::name ::age])
...
;validate data via spec and make sure no additional keys are included
(s/valid? ::person-spec some-input)
但我还有一个额外的需要是确保传入的数据只包含我想要的键。(在这种情况下:name
,:age
只有键。为此,我做了类似的事情:
(def permitted-keys [:age :name])
(select-keys some-input permitted-keys)
,确保只有那些键被过滤。
有没有一种方法可以在我的映射结构规范定义(s/keys
)和我为过滤允许的键(permitted-keys
)而采取的这个额外步骤之间重用一些代码?
也许通过从s/keys
定义中提取键列表,或者通过将现有的键向量传递给s/keys
?