@@ -52,19 +52,16 @@ impl<const N: usize> FromBase32 for [u8; N] {
5252 fn from_base32 ( data : & [ Fe32 ] ) -> Result < Self , Self :: Err > {
5353 let mut res_arr = [ 0 ; N ] ;
5454 // Do in a for loop to place in the array directly, not using `collect`
55- let mut idx = 0 ;
55+ let mut count = 0 ;
5656 for elem in data. iter ( ) . copied ( ) . fes_to_bytes ( ) {
57- if idx >= N {
58- break ; // too many inputs, stop early, OK
57+ if count < N {
58+ res_arr [ count ] = elem ;
5959 }
60- res_arr[ idx] = elem;
61- idx += 1 ;
60+ count += 1 ;
6261 }
63- if idx != N {
62+ if count != N {
6463 return Err ( Bolt11ParseError :: InvalidSliceLength (
65- data. len ( ) ,
66- ( N * 8 + 4 ) / 5 ,
67- "<[u8; N]>" ,
64+ count, N , "<[u8; N]>" ,
6865 ) ) ;
6966 }
7067 Ok ( res_arr)
@@ -79,7 +76,7 @@ impl FromBase32 for PaymentSecret {
7976 return Err ( Bolt11ParseError :: InvalidSliceLength (
8077 field_data. len ( ) ,
8178 52 ,
82- "payment secret " ,
79+ "PaymentSecret " ,
8380 ) ) ;
8481 }
8582 let data_bytes = <[ u8 ; 32 ] >:: from_base32 ( field_data) ?;
@@ -383,10 +380,11 @@ impl FromStr for SignedRawBolt11Invoice {
383380 fn from_str ( s : & str ) -> Result < Self , Self :: Err > {
384381 let parsed = CheckedHrpstring :: new :: < Bech32 > ( s) ?;
385382 let hrp = parsed. hrp ( ) ;
386- // Access original non-packed 32 byte values (as Fe32s) (iterator type is needed for API hack)
387- let data: Vec < _ > = parsed. fe32_iter :: < alloc:: boxed:: Box < dyn Iterator < Item = u8 > > > ( ) . collect ( ) ;
383+ // Access original non-packed 32 byte values (as Fe32s)
384+ // Note: the type argument is needed due to the API peculiarities, but it's not used
385+ let data: Vec < _ > = parsed. fe32_iter :: < & mut dyn Iterator < Item = u8 > > ( ) . collect ( ) ;
388386
389- const SIGNATURE_LEN5 : usize = 104 ; // 32 -bit values, 65 bytes
387+ const SIGNATURE_LEN5 : usize = 104 ; // number of the 5 -bit values (equals to 65 bytes)
390388 if data. len ( ) < SIGNATURE_LEN5 {
391389 return Err ( Bolt11ParseError :: TooShortDataPart ) ;
392390 }
@@ -467,7 +465,7 @@ impl FromBase32 for PositiveTimestamp {
467465 return Err ( Bolt11ParseError :: InvalidSliceLength (
468466 b32. len ( ) ,
469467 7 ,
470- "timestamp " ,
468+ "PositiveTimestamp " ,
471469 ) ) ;
472470 }
473471 let timestamp: u64 = parse_u64_be ( b32)
@@ -486,7 +484,7 @@ impl FromBase32 for Bolt11InvoiceSignature {
486484 return Err ( Bolt11ParseError :: InvalidSliceLength (
487485 signature. len ( ) ,
488486 104 ,
489- "signature " ,
487+ "Bolt11InvoiceSignature " ,
490488 ) ) ;
491489 }
492490 let recoverable_signature_bytes = <[ u8 ; 65 ] >:: from_base32 ( signature) ?;
0 commit comments