}
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))
}
}
pub struct DirectedChannelInfo<'a> {
channel: &'a ChannelInfo,
direction: Option<&'a ChannelUpdateInfo>,
- source: &'a NodeId,
- target: &'a NodeId,
}
impl<'a> DirectedChannelInfo<'a> {
/// 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
impl<'a> fmt::Debug for DirectedChannelInfo<'a> {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
f.debug_struct("DirectedChannelInfo")
- .field("source", &self.source)
- .field("target", &self.target)
.field("channel", &self.channel)
.finish()
}
for chan_id in $node.channels.iter() {
let chan = network_channels.get(chan_id).unwrap();
if !chan.features.requires_unknown_bits() {
- let directed_channel =
+ let (directed_channel, source) =
chan.as_directed_to(&$node_id).expect("inconsistent NetworkGraph");
- let source = directed_channel.source();
- let target = directed_channel.target();
if first_hops.is_none() || *source != our_node_id {
if let Some(direction) = directed_channel.direction() {
if direction.enabled {
info: directed_channel.with_update().unwrap(),
short_channel_id: *chan_id,
};
- add_entry!(candidate, *source, *target, $fee_to_target_msat, $next_hops_value_contribution, $next_hops_path_htlc_minimum_msat, $next_hops_path_penalty_msat, $next_hops_cltv_delta);
+ add_entry!(candidate, *source, $node_id, $fee_to_target_msat, $next_hops_value_contribution, $next_hops_path_htlc_minimum_msat, $next_hops_path_penalty_msat, $next_hops_cltv_delta);
}
}
}
let candidate = network_channels
.get(&hop.short_channel_id)
.and_then(|channel| channel.as_directed_to(&target))
- .and_then(|channel| channel.with_update())
+ .and_then(|(channel, _)| channel.with_update())
.map(|info| CandidateRouteHop::PublicHop {
info,
short_channel_id: hop.short_channel_id,