@@ -85,9 +85,9 @@ impl OfferBuilder {
8585 /// Use a different pubkey per offer to avoid correlating offers.
8686 pub fn new ( description : String , signing_pubkey : PublicKey ) -> Self {
8787 let offer = OfferContents {
88- chains : None , metadata : None , amount : None , description, features : None ,
89- absolute_expiry : None , issuer : None , paths : None , quantity_min : None ,
90- quantity_max : None , signing_pubkey : Some ( signing_pubkey) ,
88+ chains : None , metadata : None , amount : None , description,
89+ features : OfferFeatures :: empty ( ) , absolute_expiry : None , issuer : None , paths : None ,
90+ quantity_min : None , quantity_max : None , signing_pubkey : Some ( signing_pubkey) ,
9191 } ;
9292 OfferBuilder { offer }
9393 }
@@ -127,7 +127,7 @@ impl OfferBuilder {
127127 /// Successive calls to this method will override the previous setting.
128128 #[ cfg( test) ]
129129 pub fn features ( mut self , features : OfferFeatures ) -> Self {
130- self . offer . features = Some ( features) ;
130+ self . offer . features = features;
131131 self
132132 }
133133
@@ -348,13 +348,17 @@ impl OfferContents {
348348 ) ,
349349 } ;
350350
351+ let features = {
352+ if self . features == OfferFeatures :: empty ( ) { None } else { Some ( & self . features ) }
353+ } ;
354+
351355 OfferTlvStreamRef {
352356 chains : self . chains . as_ref ( ) ,
353357 metadata : self . metadata . as_ref ( ) ,
354358 currency,
355359 amount,
356360 description : Some ( & self . description ) ,
357- features : self . features . as_ref ( ) ,
361+ features,
358362 absolute_expiry : self . absolute_expiry . map ( |duration| duration. as_secs ( ) ) ,
359363 paths : self . paths . as_ref ( ) ,
360364 issuer : self . issuer . as_ref ( ) ,
@@ -441,11 +445,11 @@ mod tests {
441445 assert_eq ! ( offer. metadata( ) , None ) ;
442446 assert_eq ! ( offer. amount( ) , None ) ;
443447 assert_eq ! ( offer. description( ) , "foo" ) ;
444- assert_eq ! ( offer. features( ) , None ) ;
448+ assert_eq ! ( offer. features( ) , & OfferFeatures :: empty ( ) ) ;
445449 assert_eq ! ( offer. absolute_expiry( ) , None ) ;
446450 #[ cfg( feature = "std" ) ]
447451 assert ! ( !offer. is_expired( ) ) ;
448- assert_eq ! ( offer. paths( ) , None ) ;
452+ assert_eq ! ( offer. paths( ) , & [ ] ) ;
449453 assert_eq ! ( offer. issuer( ) , None ) ;
450454 assert_eq ! ( offer. quantity_min( ) , 1 ) ;
451455 assert_eq ! ( offer. quantity_max( ) , 1 ) ;
@@ -551,19 +555,19 @@ mod tests {
551555 #[ test]
552556 fn builds_offer_with_features ( ) {
553557 let offer = OfferBuilder :: new ( "foo" . into ( ) , pubkey ( 42 ) )
554- . features ( OfferFeatures :: empty ( ) )
558+ . features ( OfferFeatures :: unknown ( ) )
555559 . build ( )
556560 . unwrap ( ) ;
557- assert_eq ! ( offer. features( ) , Some ( & OfferFeatures :: empty ( ) ) ) ;
558- assert_eq ! ( offer. as_tlv_stream( ) . features, Some ( & OfferFeatures :: empty ( ) ) ) ;
561+ assert_eq ! ( offer. features( ) , & OfferFeatures :: unknown ( ) ) ;
562+ assert_eq ! ( offer. as_tlv_stream( ) . features, Some ( & OfferFeatures :: unknown ( ) ) ) ;
559563
560564 let offer = OfferBuilder :: new ( "foo" . into ( ) , pubkey ( 42 ) )
561565 . features ( OfferFeatures :: unknown ( ) )
562566 . features ( OfferFeatures :: empty ( ) )
563567 . build ( )
564568 . unwrap ( ) ;
565- assert_eq ! ( offer. features( ) , Some ( & OfferFeatures :: empty( ) ) ) ;
566- assert_eq ! ( offer. as_tlv_stream( ) . features, Some ( & OfferFeatures :: empty ( ) ) ) ;
569+ assert_eq ! ( offer. features( ) , & OfferFeatures :: empty( ) ) ;
570+ assert_eq ! ( offer. as_tlv_stream( ) . features, None ) ;
567571 }
568572
569573 #[ test]
@@ -618,7 +622,7 @@ mod tests {
618622 . build ( )
619623 . unwrap ( ) ;
620624 let tlv_stream = offer. as_tlv_stream ( ) ;
621- assert_eq ! ( offer. paths( ) , Some ( & paths) ) ;
625+ assert_eq ! ( offer. paths( ) , paths. as_slice ( ) ) ;
622626 assert_eq ! ( offer. signing_pubkey( ) , pubkey( 42 ) ) ;
623627 assert_ne ! ( pubkey( 42 ) , pubkey( 44 ) ) ;
624628 assert_eq ! ( tlv_stream. paths, Some ( & paths) ) ;
@@ -631,15 +635,15 @@ mod tests {
631635 . issuer ( "bar" . into ( ) )
632636 . build ( )
633637 . unwrap ( ) ;
634- assert_eq ! ( offer. issuer( ) , Some ( & String :: from ( "bar" ) ) ) ;
638+ assert_eq ! ( offer. issuer( ) , Some ( "bar" ) ) ;
635639 assert_eq ! ( offer. as_tlv_stream( ) . issuer, Some ( & String :: from( "bar" ) ) ) ;
636640
637641 let offer = OfferBuilder :: new ( "foo" . into ( ) , pubkey ( 42 ) )
638642 . issuer ( "bar" . into ( ) )
639643 . issuer ( "baz" . into ( ) )
640644 . build ( )
641645 . unwrap ( ) ;
642- assert_eq ! ( offer. issuer( ) , Some ( & String :: from ( "baz" ) ) ) ;
646+ assert_eq ! ( offer. issuer( ) , Some ( "baz" ) ) ;
643647 assert_eq ! ( offer. as_tlv_stream( ) . issuer, Some ( & String :: from( "baz" ) ) ) ;
644648 }
645649
0 commit comments