f - Look up source from NetworkGraph
[rust-lightning] / lightning / src / routing / network_graph.rs
index c641ced7de84d59127e7e7ca63dc4968f04a85f2..fb90c9386dc3aa2bd6783a0993ea08bd7d2bd48d 100644 (file)
@@ -660,19 +660,19 @@ pub struct ChannelInfo {
 }
 
 impl ChannelInfo {
-       /// Returns a [`DirectedChannelInfo`] for the channel directed to the given `target`, or `None`
-       /// if `target` is not one of the channel's counterparties.
-       pub fn as_directed_to(&self, target: &NodeId) -> Option<DirectedChannelInfo> {
-               let (direction, source, target) = {
+       /// Returns a [`DirectedChannelInfo`] for the channel directed to the given `target` from a
+       /// returned `source`, or `None` if `target` is not one of the channel's counterparties.
+       pub fn as_directed_to(&self, target: &NodeId) -> Option<(DirectedChannelInfo, &NodeId)> {
+               let (direction, source) = {
                        if target == &self.node_one {
-                               (self.two_to_one.as_ref(), &self.node_two, &self.node_one)
+                               (self.two_to_one.as_ref(), &self.node_two)
                        } else if target == &self.node_two {
-                               (self.one_to_two.as_ref(), &self.node_one, &self.node_two)
+                               (self.one_to_two.as_ref(), &self.node_one)
                        } else {
                                return None;
                        }
                };
-               Some(DirectedChannelInfo { channel: self, direction, source, target })
+               Some((DirectedChannelInfo { channel: self, direction }, source))
        }
 }
 
@@ -697,27 +697,19 @@ impl_writeable_tlv_based!(ChannelInfo, {
 
 /// A wrapper around [`ChannelInfo`] representing information about the channel as directed from a
 /// source node to a target node.
-#[derive(Clone, Debug)]
+#[derive(Clone)]
 pub struct DirectedChannelInfo<'a> {
        channel: &'a ChannelInfo,
        direction: Option<&'a ChannelUpdateInfo>,
-       source: &'a NodeId,
-       target: &'a NodeId,
 }
 
-impl<'a: 'b, 'b> DirectedChannelInfo<'a> {
+impl<'a> DirectedChannelInfo<'a> {
        /// Returns information for the channel.
        pub fn channel(&self) -> &'a ChannelInfo { self.channel }
 
        /// Returns information for the direction.
        pub fn direction(&self) -> Option<&'a ChannelUpdateInfo> { self.direction }
 
-       /// Returns the node id for the source.
-       pub fn source(&self) -> &'a NodeId { self.source }
-
-       /// Returns the node id for the target.
-       pub fn target(&self) -> &'a NodeId { self.target }
-
        /// Returns the [`EffectiveCapacity`] of the channel in the direction.
        ///
        /// This is either the total capacity from the funding transaction, if known, or the
@@ -749,8 +741,16 @@ impl<'a: 'b, 'b> DirectedChannelInfo<'a> {
        }
 }
 
+impl<'a> fmt::Debug for DirectedChannelInfo<'a> {
+       fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
+               f.debug_struct("DirectedChannelInfo")
+                       .field("channel", &self.channel)
+                       .finish()
+       }
+}
+
 /// A [`DirectedChannelInfo`] with [`ChannelUpdateInfo`] available in its the direction.
-#[derive(Clone, Debug)]
+#[derive(Clone)]
 pub(super) struct DirectedChannelInfoWithUpdate<'a> {
        inner: DirectedChannelInfo<'a>,
 }
@@ -769,6 +769,12 @@ impl<'a> DirectedChannelInfoWithUpdate<'a> {
        pub(super) fn effective_capacity(&self) -> EffectiveCapacity { self.inner.effective_capacity() }
 }
 
+impl<'a> fmt::Debug for DirectedChannelInfoWithUpdate<'a> {
+       fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
+               self.inner.fmt(f)
+       }
+}
+
 /// The effective capacity of a channel for routing purposes.
 ///
 /// While this may be smaller than the actual channel capacity, amounts greater than
@@ -792,7 +798,7 @@ pub enum EffectiveCapacity {
                capacity_msat: u64,
        },
        /// A capacity sufficient to route any payment, typically used for private channels provided by
-       /// an invoice, though may not be the case for zero-amount invoices.
+       /// an invoice.
        Infinite,
        /// A capacity that is unknown possibly because either the chain state is unavailable to know
        /// the total capacity or the `htlc_maximum_msat` was not advertised on the gossip network.