lightning-net-tokio: Allow custom smart pointers #1623
Merged
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.
Summary
This PR is simple: for the APIs in
lightning-net-tokio
, instead of requiring that thePeerManager
'sChannelMessageHandler
,RoutingMessageHandler
etc are exactly anArc<Trait>
, anything that implsDeref
whereDeref::Target: Trait
suffices.Motivation
In our project we are using newtypes (e.g.
LexeKeysManager
) whichDeref
to the LDK equivalent (KeysManager
) which implement the important traits (KeysInterface
). We've found that using custom smart pointers in this way is a convenient way for us to implement custom methods and traits on the newtype (e.g.init() -> Self
,TryFrom
,derive_pubkey()
) while reusing the default trait implementations provided by LDK. Since many of LDK's APIs are already generic acrossDeref
impls, this PR is essentially extending that idiom tolightning-net-tokio
.API Changes
Since all calling code currently uses
Arc<Trait>
, andArc
isDeref::Target: Trait
, this PR introduces 0 API-breaking changes.Implementation Notes
The
'static + Send + Sync
has to apply to both the generic argument (e.g.CMH
) as well as its target (e.g.CMH::Target
). The?Sized
marker was removed fromLogger
, asSized
is required.I have integrated this change in our own project and it's working perfectly as a "drop in" replacement of the existing
lightning-net-tokio
API.