@@ -229,7 +229,9 @@ macro_rules! offer_explicit_metadata_builder_methods { (
229
229
}
230
230
} }
231
231
232
- macro_rules! offer_derived_metadata_builder_methods { ( $secp_context: ty) => {
232
+ macro_rules! offer_derived_metadata_builder_methods { (
233
+ $secp_context: ty, $self: ident, $self_type: ty
234
+ ) => {
233
235
/// Similar to [`OfferBuilder::new`] except, if [`OfferBuilder::path`] is called, the signing
234
236
/// pubkey is derived from the given [`ExpandedKey`] and [`EntropySource`]. This provides
235
237
/// recipient privacy by using a different signing pubkey for each offer. Otherwise, the
@@ -259,9 +261,11 @@ macro_rules! offer_derived_metadata_builder_methods { ($secp_context: ty) => {
259
261
}
260
262
}
261
263
262
- /// Returns an identifier for the [`Offer`] constructed by the builder.
263
- pub fn offer_id( & self ) -> OfferId {
264
- self . metadata_strategy. 0
264
+ /// Builds an [`Offer`] from the builder's settings. Returns both the offer and its [`OfferId`].
265
+ pub fn build_with_id( $self: $self_type) -> Result <( OfferId , Offer ) , Bolt12SemanticError > {
266
+ let offer_id = $self. metadata_strategy. 0 ;
267
+ let offer = $self. build( ) ?;
268
+ Ok ( ( offer_id, offer) )
265
269
}
266
270
} }
267
271
@@ -443,7 +447,7 @@ impl<'a> OfferBuilder<'a, ExplicitMetadata, secp256k1::SignOnly> {
443
447
}
444
448
445
449
impl < ' a , T : secp256k1:: Signing > OfferBuilder < ' a , DerivedMetadata , T > {
446
- offer_derived_metadata_builder_methods ! ( T ) ;
450
+ offer_derived_metadata_builder_methods ! ( T , self , Self ) ;
447
451
}
448
452
449
453
#[ cfg( all( c_bindings, not( test) ) ) ]
@@ -461,13 +465,13 @@ impl<'a> OfferWithExplicitMetadataBuilder<'a> {
461
465
462
466
#[ cfg( all( c_bindings, not( test) ) ) ]
463
467
impl < ' a > OfferWithDerivedMetadataBuilder < ' a > {
464
- offer_derived_metadata_builder_methods ! ( secp256k1:: All ) ;
468
+ offer_derived_metadata_builder_methods ! ( secp256k1:: All , self , & mut Self ) ;
465
469
offer_builder_methods ! ( self , & mut Self , ( ) , ( ) ) ;
466
470
}
467
471
468
472
#[ cfg( all( c_bindings, test) ) ]
469
473
impl < ' a > OfferWithDerivedMetadataBuilder < ' a > {
470
- offer_derived_metadata_builder_methods ! ( secp256k1:: All ) ;
474
+ offer_derived_metadata_builder_methods ! ( secp256k1:: All , self , & mut Self ) ;
471
475
offer_builder_methods ! ( self , & mut Self , & mut Self , self ) ;
472
476
offer_builder_test_methods ! ( self , & mut Self , & mut Self , self ) ;
473
477
}
0 commit comments