Comments (2)
To answer my own question: wrapping the s/or in an st/spec seems to work?
(s/def ::d (st/spec (s/merge (st/spec (s/or :one (s/keys :req-un [::a])
:two (s/keys :req-un [::b])))
(s/keys :req-un [::c]))))
from spec-tools.
Hello @Biserkov , the problem is the following: there is a bug introduced with multi-spec
support after version 0.10.0 at the parse-form
function. Your spec is decomposed by parse-form
which yields :type [:or [:map]]
to the inner most portion of your spec.
When we look at the parse-form
, we find (current-version):
(defmethod parse-form 'clojure.spec.alpha/merge [_ form]
(let [type-priority #((:type %) {:map 0
:multi-spec 1} 0)]
(apply impl/deep-merge (->> (rest form)
(map parse-spec)
(sort-by type-priority)))))
The ArityException is thrown by this operation:
#([:or [:map]] {:map 0
:multi-spec 1} 0)
;; => Wrong number of args (2) passed to: clojure.lang.PersistentVector
The same code in version 0.10.0 looks like this:
(defmethod parse-form 'clojure.spec.alpha/merge [_ form]
(apply impl/deep-merge (map parse-spec (rest form))))
Does not contain the portion to sort by priority, thus no error. I opened a PR to change the type-priority
function to be more defensive.
from spec-tools.
Related Issues (20)
- StackOverflow when creating or utilising spec-tools with self referencing spec HOT 2
- ClassCastException using transformers
- Correctly generate Swagger2 for specs using int-in HOT 4
- ds/spec namespaced keys not prefixed with name HOT 4
- multi-spec -> swagger returns empty map
- strip-extra-keys-transformer not working with s/or if ors predicates are non- map validating specs
- s/keys + clojure.core/or -> swagger returns or args as required
- json-transformer not working correctly with set-specs HOT 1
- Coerce JS objects? HOT 2
- `spec-tools.transform/string->date` and `date->string` fail roundtrip for some dates
- `spec-tools.data-spec/spec` has a wrong assert
- s/explain-data throws exception for s/map-of spec with a s/or key HOT 1
- Unable to parse spec with s/nonconforming HOT 1
- `select-spec` removing keys when using `s/or`
- newer version doesn't support list in data spec
- In OpenAPI 3.0.x, Cannot use null type
- Invalid JSON Schema type generated for `s/tuple`
- `st/strip-extra-keys-transformer` not handling merged `s/or`
- Inconsistent results from s/valid? and s/explain when trying to spec list of values
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from spec-tools.