From 319c768b354ac1fd9d976905556432a25860ffe7 Mon Sep 17 00:00:00 2001 From: Tommi Reiman Date: Wed, 20 Feb 2019 08:28:26 +0200 Subject: [PATCH] Example of deeply-nested spec --- doc/coercion/clojure_spec_coercion.md | 31 +++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/doc/coercion/clojure_spec_coercion.md b/doc/coercion/clojure_spec_coercion.md index 96467530..041e1a57 100644 --- a/doc/coercion/clojure_spec_coercion.md +++ b/doc/coercion/clojure_spec_coercion.md @@ -58,3 +58,34 @@ Failing coercion: (match-by-path-and-coerce! "/metosin/users/ikitommi") ; => ExceptionInfo Request coercion failed... ``` + +## Deeply nested specs + +```clj +(require '[clojure.spec.alpha :as s]) +(require '[spec-tools.core :as st]) + +(s/def :sku/id keyword?) +(s/def ::sku (s/keys :req-un [:sku/id])) +(s/def ::skus (s/coll-of ::sku :into [])) + +(s/def :photo/id int?) +(s/def ::photo (s/keys :req-un [:photo/id])) +(s/def ::photos (s/coll-of ::photo :into [])) + +(s/def ::my-json-api (s/keys :req-un [::skus ::photos])) + +(st/coerce + ::my-json-api + {:skus [{:id "123"}] + :photos [{:id "123"}]} + st/string-transformer) +; {:skus [{:id :123}], :photos [{:id 123}]} + +(st/coerce + ::my-json-api + {:skus [{:id :123}] + :photos [{:id "123"}]} + st/json-transformer) +; {:skus [{:id :123}], :photos [{:id "123"}]} +```