Skip to content

Commit fd8a2d9

Browse files
committed
Make offers::Amount Copy and export it in bindings
`Amount` is less than two pointers long, so there's no reason it shouldn't be `Copy`. Further, because its an enum, bindings can't map a reference to it in an `Option`. Thus, here, we simply make it `Copy` and return it in `Option`s rather than a reference to it.
1 parent 2802993 commit fd8a2d9

File tree

3 files changed

+11
-11
lines changed

3 files changed

+11
-11
lines changed

lightning/src/offers/invoice.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -697,7 +697,7 @@ macro_rules! invoice_accessors { ($self: ident, $contents: expr) => {
697697
///
698698
/// [`Offer`]: crate::offers::offer::Offer
699699
/// [`Offer::amount`]: crate::offers::offer::Offer::amount
700-
pub fn amount(&$self) -> Option<&Amount> {
700+
pub fn amount(&$self) -> Option<Amount> {
701701
$contents.amount()
702702
}
703703

@@ -944,7 +944,7 @@ impl InvoiceContents {
944944
}
945945
}
946946

947-
fn amount(&self) -> Option<&Amount> {
947+
fn amount(&self) -> Option<Amount> {
948948
match self {
949949
InvoiceContents::ForOffer { invoice_request, .. } =>
950950
invoice_request.inner.offer.amount(),
@@ -1545,7 +1545,7 @@ mod tests {
15451545
assert_eq!(unsigned_invoice.payer_metadata(), &[1; 32]);
15461546
assert_eq!(unsigned_invoice.offer_chains(), Some(vec![ChainHash::using_genesis_block(Network::Bitcoin)]));
15471547
assert_eq!(unsigned_invoice.metadata(), None);
1548-
assert_eq!(unsigned_invoice.amount(), Some(&Amount::Bitcoin { amount_msats: 1000 }));
1548+
assert_eq!(unsigned_invoice.amount(), Some(Amount::Bitcoin { amount_msats: 1000 }));
15491549
assert_eq!(unsigned_invoice.description(), Some(PrintableString("")));
15501550
assert_eq!(unsigned_invoice.offer_features(), Some(&OfferFeatures::empty()));
15511551
assert_eq!(unsigned_invoice.absolute_expiry(), None);
@@ -1589,7 +1589,7 @@ mod tests {
15891589
assert_eq!(invoice.payer_metadata(), &[1; 32]);
15901590
assert_eq!(invoice.offer_chains(), Some(vec![ChainHash::using_genesis_block(Network::Bitcoin)]));
15911591
assert_eq!(invoice.metadata(), None);
1592-
assert_eq!(invoice.amount(), Some(&Amount::Bitcoin { amount_msats: 1000 }));
1592+
assert_eq!(invoice.amount(), Some(Amount::Bitcoin { amount_msats: 1000 }));
15931593
assert_eq!(invoice.description(), Some(PrintableString("")));
15941594
assert_eq!(invoice.offer_features(), Some(&OfferFeatures::empty()));
15951595
assert_eq!(invoice.absolute_expiry(), None);

lightning/src/offers/invoice_request.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1247,7 +1247,7 @@ mod tests {
12471247
assert_eq!(unsigned_invoice_request.payer_metadata(), &[1; 32]);
12481248
assert_eq!(unsigned_invoice_request.chains(), vec![ChainHash::using_genesis_block(Network::Bitcoin)]);
12491249
assert_eq!(unsigned_invoice_request.metadata(), None);
1250-
assert_eq!(unsigned_invoice_request.amount(), Some(&Amount::Bitcoin { amount_msats: 1000 }));
1250+
assert_eq!(unsigned_invoice_request.amount(), Some(Amount::Bitcoin { amount_msats: 1000 }));
12511251
assert_eq!(unsigned_invoice_request.description(), Some(PrintableString("")));
12521252
assert_eq!(unsigned_invoice_request.offer_features(), &OfferFeatures::empty());
12531253
assert_eq!(unsigned_invoice_request.absolute_expiry(), None);
@@ -1279,7 +1279,7 @@ mod tests {
12791279
assert_eq!(invoice_request.payer_metadata(), &[1; 32]);
12801280
assert_eq!(invoice_request.chains(), vec![ChainHash::using_genesis_block(Network::Bitcoin)]);
12811281
assert_eq!(invoice_request.metadata(), None);
1282-
assert_eq!(invoice_request.amount(), Some(&Amount::Bitcoin { amount_msats: 1000 }));
1282+
assert_eq!(invoice_request.amount(), Some(Amount::Bitcoin { amount_msats: 1000 }));
12831283
assert_eq!(invoice_request.description(), Some(PrintableString("")));
12841284
assert_eq!(invoice_request.offer_features(), &OfferFeatures::empty());
12851285
assert_eq!(invoice_request.absolute_expiry(), None);

lightning/src/offers/offer.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -582,7 +582,7 @@ macro_rules! offer_accessors { ($self: ident, $contents: expr) => {
582582
}
583583

584584
/// The minimum amount required for a successful payment of a single item.
585-
pub fn amount(&$self) -> Option<&$crate::offers::offer::Amount> {
585+
pub fn amount(&$self) -> Option<$crate::offers::offer::Amount> {
586586
$contents.amount()
587587
}
588588

@@ -808,8 +808,8 @@ impl OfferContents {
808808
self.metadata.as_ref().and_then(|metadata| metadata.as_bytes())
809809
}
810810

811-
pub fn amount(&self) -> Option<&Amount> {
812-
self.amount.as_ref()
811+
pub fn amount(&self) -> Option<Amount> {
812+
self.amount
813813
}
814814

815815
pub fn description(&self) -> Option<PrintableString> {
@@ -982,7 +982,7 @@ impl Writeable for OfferContents {
982982

983983
/// The minimum amount required for an item in an [`Offer`], denominated in either bitcoin or
984984
/// another currency.
985-
#[derive(Clone, Debug, PartialEq)]
985+
#[derive(Clone, Copy, Debug, PartialEq)]
986986
pub enum Amount {
987987
/// An amount of bitcoin.
988988
Bitcoin {
@@ -1381,7 +1381,7 @@ mod tests {
13811381
.build()
13821382
.unwrap();
13831383
let tlv_stream = offer.as_tlv_stream();
1384-
assert_eq!(offer.amount(), Some(&bitcoin_amount));
1384+
assert_eq!(offer.amount(), Some(bitcoin_amount));
13851385
assert_eq!(tlv_stream.amount, Some(1000));
13861386
assert_eq!(tlv_stream.currency, None);
13871387

0 commit comments

Comments
 (0)