In defsystem, move user-provided protocol implementations after the generic ones#6
Open
MatthewDarling wants to merge 1 commit intopalletops:developfrom
Open
In defsystem, move user-provided protocol implementations after the generic ones#6MatthewDarling wants to merge 1 commit intopalletops:developfrom
MatthewDarling wants to merge 1 commit intopalletops:developfrom
Conversation
This allows the user to provide their own versions of start, stop, or status for systems. I'll need to test it, but based on the following example, it should work: user> (defrecord NewThing [attr] Speak (say [this] "woo") Speak (say [this] "boo")) ;=> user.NewThing user> (say (->NewThing 5)) "boo"
Member
|
Merged, thanks! |
Contributor
Author
|
Thanks! Unfortunately, I've found a minor wrinkle: this doesn't play nicely with namespace aliases. user> (ns testing-leaven
(:require [com.palletops.leaven.protocols :as leaven-p]
[com.palletops.leaven :refer [start stop status] :as leaven]))
;; => nil
testing-leaven> (leaven/defsystem TestingOut [config connection]
{:depends {:connection [:config]}}
leaven-p/Queryable
(status [component] (if connection :started :stopped)))
CompilerException java.lang.ClassFormatError: Duplicate method name&signature in class file testing_leaven/TestingOut, compiling:(/private/var/folders/gq/tjlj76ps59j81386jkt40jsm0000gn/T/form-init7169748078051573163.clj:1:1)
testing-leaven> (leaven/defsystem TestingOut [config connection]
{:depends {:connection [:config]}}
com.palletops.leaven.protocols/Queryable
(status [component] (if connection :started :stopped)))
;; => testing_leaven.TestingOutI really don't know why there would be different behaviour between the two. Does it make sense to revert these changes for now? |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This allows the user to provide their own versions of
start,stop, orstatusfor systems. For my use case, I have code that depends on the system being initialized, so I want to provide a customstatusmethod that checks specific things.This behaviour seems to be allowed by vanilla
defrecord- here's an example, with my version of Leaven installed locally:I realize that I could just make a plain record and implement the Leaven protocols myself, but I would like to rely on the other nice default behaviours of
defsystem:)