-
Notifications
You must be signed in to change notification settings - Fork 89
Open
Description
Hi there!
Have been really appreciating Bidi's data-driven approach to routing. I recently ran into something that surprised me, and I'm curious if I've gone astray.
Here's a rough sketch:
(require
'[bidi.bidi :as bidi]
'[bidi.ring :as bidi.ring])
(defmulti route1 ,,,)
(defmethod route1 ,,,)
(def routes
["/route1" route1])
(def handler
(bidi.ring/make-handler routes))
(handler {:uri "/route1" ,,,})
;; => Execution error (IllegalArgumentException) at bidi.bidi/eval7814$fn$G (bidi.cljc:183). No implementation of method: :resolve-handler of protocol: #'bidi.bidi/Matched found for class: clojure.lang.MultiFnIt's easy enough to implement the bidi.bidi/Matched and bidi.ring/Ring protocols for clojure.lang.MultiFn (identical to the Fn implementations):
(extend-protocol bidi/Matched
clojure.lang.MultiFn
(resolve-handler [this m] (bidi/succeed this m))
(unresolve-handler [this m] (when (= this (:handler m)) "")))
(extend-protocol bidi.ring/Ring
clojure.lang.MultiFn
(request [f req _] (f req)))which seems to work as expected. But I'm curious whether this is the idiomatic way of doing this, or if MultiFn isn't supported for some other reason (e.g. CLJS, maintaining bidirectionality, etc., etc.). Mainly just looking for your guidance on the right way to go about doing this.
Thanks!
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels