私は受信データの内容を検証する仕様定義を持っています。データはフィールドのマップなので、spec/keys
を使用して検証します。例:clojure 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
定義からキーのリストを抽出することのいずれかによって、またはにキーの既存のベクトルを渡すこと10?
[このマクロ](https://github.com/gfredericks/schpec/blob/master/src/com/gfredericks/schpec.clj#L13-L35)を参照してください。 –