Skip to content

Commit 20f2dab

Browse files
committed
Create an AOnionMessenger trait similar to our other AStructs
This allows us to have a bound on any `OnionMessenger` without having to create bounds for every bound in `OnionMessenger`.
1 parent 0ffa4b3 commit 20f2dab

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed

lightning/src/onion_message/messenger.rs

+64
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,70 @@ use {
4747

4848
pub(super) const MAX_TIMER_TICKS: usize = 2;
4949

50+
/// A trivial trait which describes any [`OnionMessenger`].
51+
///
52+
/// This is not exported to bindings users as general cover traits aren't useful in other
53+
/// languages.
54+
pub trait AOnionMessenger {
55+
/// A type implementing [`EntropySource`]
56+
type EntropySource: EntropySource + ?Sized;
57+
/// A type that may be dereferenced to [`Self::EntropySource`]
58+
type ES: Deref<Target = Self::EntropySource>;
59+
/// A type implementing [`NodeSigner`]
60+
type NodeSigner: NodeSigner + ?Sized;
61+
/// A type that may be dereferenced to [`Self::NodeSigner`]
62+
type NS: Deref<Target = Self::NodeSigner>;
63+
/// A type implementing [`Logger`]
64+
type Logger: Logger + ?Sized;
65+
/// A type that may be dereferenced to [`Self::Logger`]
66+
type L: Deref<Target = Self::Logger>;
67+
/// A type implementing [`NodeIdLookUp`]
68+
type NodeIdLookUp: NodeIdLookUp + ?Sized;
69+
/// A type that may be dereferenced to [`Self::NodeIdLookUp`]
70+
type NL: Deref<Target = Self::NodeIdLookUp>;
71+
/// A type implementing [`MessageRouter`]
72+
type MessageRouter: MessageRouter + ?Sized;
73+
/// A type that may be dereferenced to [`Self::MessageRouter`]
74+
type MR: Deref<Target = Self::MessageRouter>;
75+
/// A type implementing [`OffersMessageHandler`]
76+
type OffersMessageHandler: OffersMessageHandler + ?Sized;
77+
/// A type that may be dereferenced to [`Self::OffersMessageHandler`]
78+
type OMH: Deref<Target = Self::OffersMessageHandler>;
79+
/// A type implementing [`CustomOnionMessageHandler`]
80+
type CustomOnionMessageHandler: CustomOnionMessageHandler + ?Sized;
81+
/// A type that may be dereferenced to [`Self::CustomOnionMessageHandler`]
82+
type CMH: Deref<Target = Self::CustomOnionMessageHandler>;
83+
/// Returns a reference to the actual [`OnionMessenger`] object.
84+
fn get_om(&self) -> &OnionMessenger<Self::ES, Self::NS, Self::L, Self::NL, Self::MR, Self::OMH, Self::CMH>;
85+
}
86+
87+
impl<ES: Deref, NS: Deref, L: Deref, NL: Deref, MR: Deref, OMH: Deref, CMH: Deref> AOnionMessenger
88+
for OnionMessenger<ES, NS, L, NL, MR, OMH, CMH> where
89+
ES::Target: EntropySource,
90+
NS::Target: NodeSigner,
91+
L::Target: Logger,
92+
NL::Target: NodeIdLookUp,
93+
MR::Target: MessageRouter,
94+
OMH::Target: OffersMessageHandler,
95+
CMH::Target: CustomOnionMessageHandler,
96+
{
97+
type EntropySource = ES::Target;
98+
type ES = ES;
99+
type NodeSigner = NS::Target;
100+
type NS = NS;
101+
type Logger = L::Target;
102+
type L = L;
103+
type NodeIdLookUp = NL::Target;
104+
type NL = NL;
105+
type MessageRouter = MR::Target;
106+
type MR = MR;
107+
type OffersMessageHandler = OMH::Target;
108+
type OMH = OMH;
109+
type CustomOnionMessageHandler = CMH::Target;
110+
type CMH = CMH;
111+
fn get_om(&self) -> &OnionMessenger<ES, NS, L, NL, MR, OMH, CMH> { self }
112+
}
113+
50114
/// A sender, receiver and forwarder of [`OnionMessage`]s.
51115
///
52116
/// # Handling Messages

0 commit comments

Comments
 (0)