@@ -106,7 +106,7 @@ impl OfferBuilder {
106
106
let offer = OfferContents {
107
107
chains : None , metadata : None , amount : None , description,
108
108
features : OfferFeatures :: empty ( ) , absolute_expiry : None , issuer : None , paths : None ,
109
- supported_quantity : Quantity :: one ( ) , signing_pubkey,
109
+ supported_quantity : Quantity :: One , signing_pubkey,
110
110
} ;
111
111
OfferBuilder { offer }
112
112
}
@@ -178,7 +178,7 @@ impl OfferBuilder {
178
178
}
179
179
180
180
/// Sets the quantity of items for [`Offer::supported_quantity`]. If not called, defaults to
181
- /// [`Quantity::one `].
181
+ /// [`Quantity::One `].
182
182
///
183
183
/// Successive calls to this method will override the previous setting.
184
184
pub fn supported_quantity ( mut self , quantity : Quantity ) -> Self {
@@ -464,19 +464,17 @@ impl OfferContents {
464
464
465
465
fn is_valid_quantity ( & self , quantity : u64 ) -> bool {
466
466
match self . supported_quantity {
467
- Quantity :: Bounded ( n) => {
468
- let n = n. get ( ) ;
469
- if n == 1 { false }
470
- else { quantity > 0 && quantity <= n }
471
- } ,
467
+ Quantity :: Bounded ( n) => quantity <= n. get ( ) ,
472
468
Quantity :: Unbounded => quantity > 0 ,
469
+ Quantity :: One => quantity == 1 ,
473
470
}
474
471
}
475
472
476
473
fn expects_quantity ( & self ) -> bool {
477
474
match self . supported_quantity {
478
- Quantity :: Bounded ( n ) => n . get ( ) != 1 ,
475
+ Quantity :: Bounded ( _ ) => true ,
479
476
Quantity :: Unbounded => true ,
477
+ Quantity :: One => false ,
480
478
}
481
479
}
482
480
@@ -553,21 +551,16 @@ pub enum Quantity {
553
551
Bounded ( NonZeroU64 ) ,
554
552
/// One or more items.
555
553
Unbounded ,
554
+ /// Only one item.
555
+ One ,
556
556
}
557
557
558
558
impl Quantity {
559
- /// The default quantity of one.
560
- pub fn one ( ) -> Self {
561
- Quantity :: Bounded ( NonZeroU64 :: new ( 1 ) . unwrap ( ) )
562
- }
563
-
564
559
fn to_tlv_record ( & self ) -> Option < u64 > {
565
560
match self {
566
- Quantity :: Bounded ( n) => {
567
- let n = n. get ( ) ;
568
- if n == 1 { None } else { Some ( n) }
569
- } ,
561
+ Quantity :: Bounded ( n) => Some ( n. get ( ) ) ,
570
562
Quantity :: Unbounded => Some ( 0 ) ,
563
+ Quantity :: One => None ,
571
564
}
572
565
}
573
566
}
@@ -639,9 +632,8 @@ impl TryFrom<OfferTlvStream> for OfferContents {
639
632
. map ( |seconds_from_epoch| Duration :: from_secs ( seconds_from_epoch) ) ;
640
633
641
634
let supported_quantity = match quantity_max {
642
- None => Quantity :: one ( ) ,
635
+ None => Quantity :: One ,
643
636
Some ( 0 ) => Quantity :: Unbounded ,
644
- Some ( 1 ) => return Err ( SemanticError :: InvalidQuantity ) ,
645
637
Some ( n) => Quantity :: Bounded ( NonZeroU64 :: new ( n) . unwrap ( ) ) ,
646
638
} ;
647
639
@@ -708,7 +700,7 @@ mod tests {
708
700
assert ! ( !offer. is_expired( ) ) ;
709
701
assert_eq ! ( offer. paths( ) , & [ ] ) ;
710
702
assert_eq ! ( offer. issuer( ) , None ) ;
711
- assert_eq ! ( offer. supported_quantity( ) , Quantity :: one ( ) ) ;
703
+ assert_eq ! ( offer. supported_quantity( ) , Quantity :: One ) ;
712
704
assert_eq ! ( offer. signing_pubkey( ) , pubkey( 42 ) ) ;
713
705
714
706
assert_eq ! (
@@ -930,14 +922,15 @@ mod tests {
930
922
931
923
#[ test]
932
924
fn builds_offer_with_supported_quantity ( ) {
925
+ let one = NonZeroU64 :: new ( 1 ) . unwrap ( ) ;
933
926
let ten = NonZeroU64 :: new ( 10 ) . unwrap ( ) ;
934
927
935
928
let offer = OfferBuilder :: new ( "foo" . into ( ) , pubkey ( 42 ) )
936
- . supported_quantity ( Quantity :: one ( ) )
929
+ . supported_quantity ( Quantity :: One )
937
930
. build ( )
938
931
. unwrap ( ) ;
939
932
let tlv_stream = offer. as_tlv_stream ( ) ;
940
- assert_eq ! ( offer. supported_quantity( ) , Quantity :: one ( ) ) ;
933
+ assert_eq ! ( offer. supported_quantity( ) , Quantity :: One ) ;
941
934
assert_eq ! ( tlv_stream. quantity_max, None ) ;
942
935
943
936
let offer = OfferBuilder :: new ( "foo" . into ( ) , pubkey ( 42 ) )
@@ -956,13 +949,21 @@ mod tests {
956
949
assert_eq ! ( offer. supported_quantity( ) , Quantity :: Bounded ( ten) ) ;
957
950
assert_eq ! ( tlv_stream. quantity_max, Some ( 10 ) ) ;
958
951
952
+ let offer = OfferBuilder :: new ( "foo" . into ( ) , pubkey ( 42 ) )
953
+ . supported_quantity ( Quantity :: Bounded ( one) )
954
+ . build ( )
955
+ . unwrap ( ) ;
956
+ let tlv_stream = offer. as_tlv_stream ( ) ;
957
+ assert_eq ! ( offer. supported_quantity( ) , Quantity :: Bounded ( one) ) ;
958
+ assert_eq ! ( tlv_stream. quantity_max, Some ( 1 ) ) ;
959
+
959
960
let offer = OfferBuilder :: new ( "foo" . into ( ) , pubkey ( 42 ) )
960
961
. supported_quantity ( Quantity :: Bounded ( ten) )
961
- . supported_quantity ( Quantity :: one ( ) )
962
+ . supported_quantity ( Quantity :: One )
962
963
. build ( )
963
964
. unwrap ( ) ;
964
965
let tlv_stream = offer. as_tlv_stream ( ) ;
965
- assert_eq ! ( offer. supported_quantity( ) , Quantity :: one ( ) ) ;
966
+ assert_eq ! ( offer. supported_quantity( ) , Quantity :: One ) ;
966
967
assert_eq ! ( tlv_stream. quantity_max, None ) ;
967
968
}
968
969
@@ -1094,7 +1095,7 @@ mod tests {
1094
1095
#[ test]
1095
1096
fn parses_offer_with_quantity ( ) {
1096
1097
let offer = OfferBuilder :: new ( "foo" . into ( ) , pubkey ( 42 ) )
1097
- . supported_quantity ( Quantity :: one ( ) )
1098
+ . supported_quantity ( Quantity :: One )
1098
1099
. build ( )
1099
1100
. unwrap ( ) ;
1100
1101
if let Err ( e) = offer. to_string ( ) . parse :: < Offer > ( ) {
@@ -1117,17 +1118,12 @@ mod tests {
1117
1118
panic ! ( "error parsing offer: {:?}" , e) ;
1118
1119
}
1119
1120
1120
- let mut tlv_stream = offer. as_tlv_stream ( ) ;
1121
- tlv_stream. quantity_max = Some ( 1 ) ;
1122
-
1123
- let mut encoded_offer = Vec :: new ( ) ;
1124
- tlv_stream. write ( & mut encoded_offer) . unwrap ( ) ;
1125
-
1126
- match Offer :: try_from ( encoded_offer) {
1127
- Ok ( _) => panic ! ( "expected error" ) ,
1128
- Err ( e) => {
1129
- assert_eq ! ( e, ParseError :: InvalidSemantics ( SemanticError :: InvalidQuantity ) ) ;
1130
- } ,
1121
+ let offer = OfferBuilder :: new ( "foo" . into ( ) , pubkey ( 42 ) )
1122
+ . supported_quantity ( Quantity :: Bounded ( NonZeroU64 :: new ( 1 ) . unwrap ( ) ) )
1123
+ . build ( )
1124
+ . unwrap ( ) ;
1125
+ if let Err ( e) = offer. to_string ( ) . parse :: < Offer > ( ) {
1126
+ panic ! ( "error parsing offer: {:?}" , e) ;
1131
1127
}
1132
1128
}
1133
1129
0 commit comments