I've been hacking on a (currently partial) implementation of a spec
combinator I'm currently calling 'encoding-of'. It's pretty common to have
some kind of encoded version of a data structure kicking around, in json,
xml, or whatever, and it's handy to be able to describe it with spec.
That's what this is for. You give it a pair of functions for encoding and
decoding and the spec of the 'inner' data, and it glues them together into
a spec.
(s/def :t/nat-or-float (s/or :nat :t/nat, :float :t/float))
(s/def :t/test-map (s/keys :req [:t/nat-or-float]))
(s/def :t/stringy-map (encoding-of :t/test-map pr-str read-string))
(s/conform :t/stringy-map "{:t/nat-or-float 42}")
;; => #t{:nat-or-float [:nat 42]}
(gen/sample (s/gen :t/stringy-map))
;; => ("#:t{:nat-or-float -1.0}" "#:t{:nat-or-float 0.75}"
"#:t{:nat-or-float 2}" "#:t{:nat-or-float -3.0}" "#:t{:nat-or-float 8}"
"#:t{:nat-or-float 0}" "#:t{:nat-or-float -0.65625}" "#:t{:nat-or-float 1}"
"#:t{:nat-or-float 0}" "#:t{:nat-or-float 3}")
The partial implementation is here:
https://gist.github.com/e7f8230920225496370ae38fc55f2175
If there's any interest in this, I can clean it up and release it as a
standalone library. It necessarily reaches into some of the guts of
core.spec, so it may be more suitable as a patch to spec itself, if the
maintainers have an appetite for it.
- Russell
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.