@@ -5,11 +5,12 @@ use bitcoin::FeeRate;
55use log:: warn;
66
77use crate :: output_substitution:: OutputSubstitution ;
8+ use crate :: Version ;
89
910#[ derive( Debug , Clone ) ]
1011pub ( crate ) struct Params {
1112 // version
12- pub v : usize ,
13+ pub v : Version ,
1314 // disableoutputsubstitution
1415 pub output_substitution : OutputSubstitution ,
1516 // maxadditionalfeecontribution, additionalfeeoutputindex
@@ -24,7 +25,7 @@ pub(crate) struct Params {
2425impl Default for Params {
2526 fn default ( ) -> Self {
2627 Params {
27- v : 1 ,
28+ v : Version :: One ,
2829 output_substitution : OutputSubstitution :: Enabled ,
2930 additional_fee_contribution : None ,
3031 min_fee_rate : FeeRate :: BROADCAST_MIN ,
@@ -37,7 +38,7 @@ impl Default for Params {
3738impl Params {
3839 pub fn from_query_pairs < K , V , I > (
3940 pairs : I ,
40- supported_versions : & ' static [ usize ] ,
41+ supported_versions : & ' static [ Version ] ,
4142 ) -> Result < Self , Error >
4243 where
4344 I : Iterator < Item = ( K , V ) > ,
@@ -52,8 +53,9 @@ impl Params {
5253 for ( key, v) in pairs {
5354 match ( key. borrow ( ) , v. borrow ( ) ) {
5455 ( "v" , version) =>
55- params. v = match version. parse :: < usize > ( ) {
56- Ok ( version) if supported_versions. contains ( & version) => version,
56+ params. v = match version {
57+ "1" => Version :: One ,
58+ "2" => Version :: Two ,
5759 _ => return Err ( Error :: UnknownVersion { supported_versions } ) ,
5860 } ,
5961 ( "additionalfeeoutputindex" , index) =>
@@ -111,9 +113,9 @@ impl Params {
111113 }
112114}
113115
114- #[ derive( Debug ) ]
116+ #[ derive( Debug , PartialEq , Eq ) ]
115117pub ( crate ) enum Error {
116- UnknownVersion { supported_versions : & ' static [ usize ] } ,
118+ UnknownVersion { supported_versions : & ' static [ Version ] } ,
117119 FeeRate ,
118120}
119121
@@ -135,19 +137,30 @@ pub(crate) mod test {
135137 use bitcoin:: Amount ;
136138
137139 use super :: * ;
140+ use crate :: receive:: optional_parameters:: Params ;
141+ use crate :: Version ;
138142
139143 #[ test]
140144 fn test_parse_params ( ) {
141145 use bitcoin:: FeeRate ;
142146
143147 let pairs = url:: form_urlencoded:: parse ( b"maxadditionalfeecontribution=182&additionalfeeoutputindex=0&minfeerate=1&disableoutputsubstitution=true&optimisticmerge=true" ) ;
144- let params =
145- Params :: from_query_pairs ( pairs , & [ 1 ] ) . expect ( "Could not parse params from query pairs" ) ;
146- assert_eq ! ( params. v, 1 ) ;
148+ let params = Params :: from_query_pairs ( pairs , & [ Version :: One ] )
149+ . expect ( "Could not parse params from query pairs" ) ;
150+ assert_eq ! ( params. v, Version :: One ) ;
147151 assert_eq ! ( params. output_substitution, OutputSubstitution :: Disabled ) ;
148152 assert_eq ! ( params. additional_fee_contribution, Some ( ( Amount :: from_sat( 182 ) , 0 ) ) ) ;
149153 assert_eq ! ( params. min_fee_rate, FeeRate :: BROADCAST_MIN ) ;
150154 #[ cfg( feature = "_multiparty" ) ]
151155 assert ! ( params. optimistic_merge)
152156 }
157+
158+ #[ test]
159+ fn from_query_pairs_unsupported_versions ( ) {
160+ let invalid_pair: Vec < ( & str , & str ) > = vec ! [ ( "v" , "888" ) ] ;
161+ let supported_versions = & [ Version :: One , Version :: Two ] ;
162+ let params = Params :: from_query_pairs ( invalid_pair. into_iter ( ) , supported_versions) ;
163+ assert ! ( params. is_err( ) ) ;
164+ assert_eq ! ( params. err( ) . unwrap( ) , Error :: UnknownVersion { supported_versions } ) ;
165+ }
153166}
0 commit comments