This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2021-07-04
Channels
- # announcements (10)
- # babashka (16)
- # beginners (3)
- # calva (14)
- # clj-kondo (119)
- # clojure (15)
- # clojure-nl (2)
- # clojure-uk (2)
- # clojurescript (15)
- # conjure (1)
- # datascript (1)
- # duct (1)
- # fulcro (2)
- # lsp (6)
- # malli (1)
- # off-topic (9)
- # polylith (3)
- # re-frame (9)
- # reagent (12)
- # reitit (6)
- # shadow-cljs (27)
- # sql (14)
- # vim (5)
Are there any cute shortcuts for spec-ing re-frame event handler args? Typically I'm only interested in bits of what's passed and they are buried a few levels down. In this case I'd like to know the db
has a :forms map, the location
is a path string, route
is a bidi map and resp
is an anomaly or returned data containing the data I need.
[{:keys [db history/location]} [_ route resp]]
I fall to (s/asserts...)
at the top of the implementation for convenience but it'd be nice to use s/fdef
if it didn't end up super verbose.
don't all the spec-related libs tackle this? orchestra, guardrails, speced.def (my creation; it's particularly handy for inlining specs) etc
Ah, @U45T93RA6, didn’t notice you already answered this. I’m using speced.def, find it to be a great fit for re-frame events and subs
primarily because of verbosity. There are many great libraries for specing functions, but I didn’t find any other that allows you to do something like this
(d/fn [{:keys [^::db-that-contains-form db]} [_ & ^::my-coll-spec args]]
{:db (assoc db :something args)})
Yes speced.def remains unique in destructuring support, and specing beyond defn (defprotocol, fn, let, etc) One thing that probably would be handy for cljs usage is failing asynchronously or in a custom manner so that the SPA won't fail irreversibly (as it can happen with :pre). I have related work in a branch, I simply haven't proceeded b/c I don't know much about who's using speced.def or their needs (and have my OSS plate quite full)