Avoid returning a reference to a u64. 2022-09-slices-not-vecs
authorMatt Corallo <git@bluematt.me>
Sun, 18 Sep 2022 13:55:08 +0000 (13:55 +0000)
committerMatt Corallo <git@bluematt.me>
Mon, 19 Sep 2022 09:23:26 +0000 (09:23 +0000)
In c353c3ed7c40e689a3b9fb6730c6dabbd3c92cc5 an accessor method was
added which returns an `Option<&u64>`. While this allows Rust to
return an 8-byte object, returning a reference to something
pointer-sized is a somewhat strange API.

Instead, we opt for a straight `Option<u64>`, which is sadly
somewhat larger on the stack, but is simpler and already supported
in the bindings generation.

lightning-invoice/src/payment.rs

index 226e8fe42b8982cfe58e3fc8917a149cc86078d1..3b4fe7092bc38272882a14f71cf7741dd0cdc7ea 100644 (file)
@@ -741,8 +741,8 @@ pub struct InFlightHtlcs(HashMap<(u64, bool), u64>);
 impl InFlightHtlcs {
        /// Returns liquidity in msat given the public key of the HTLC source, target, and short channel
        /// id.
-       pub fn used_liquidity_msat(&self, source: &NodeId, target: &NodeId, channel_scid: u64) -> Option<&u64> {
-               self.0.get(&(channel_scid, source < target))
+       pub fn used_liquidity_msat(&self, source: &NodeId, target: &NodeId, channel_scid: u64) -> Option<u64> {
+               self.0.get(&(channel_scid, source < target)).map(|v| *v)
        }
 }