@@ -29,7 +29,7 @@ pub(crate) trait Base32Len: Base32Iterable {
2929
3030impl < const  N :  usize >  Base32Iterable  for  [ u8 ;  N ]  { 
3131	fn  fe_iter < ' s > ( & ' s  self )  -> Box < dyn  Iterator < Item  = Fe32 >  + ' s >  { 
32- 		Box :: new ( ( * self ) . into_iter ( ) . bytes_to_fes ( ) ) 
32+ 		self [ .. ] . fe_iter ( ) 
3333	} 
3434} 
3535
@@ -218,19 +218,20 @@ impl Display for SiPrefix {
218218} 
219219
220220/// Encode an integer to base32, big endian, without leading zeros 
221- fn  encode_int_be_base32 ( int :  u64 )  -> Vec < Fe32 >  { 
221+ fn  encode_int_be_base32 ( int :  u64 )  -> impl   ExactSizeIterator < Item = Fe32 >  { 
222222	let  base = 32u64 ; 
223223
224224	// (64 + 4) / 5 == 13 
225- 	let  mut  out_vec = Vec :: < Fe32 > :: with_capacity ( 13 ) ; 
225+ 	let  mut  out = [ Fe32 :: Q ;  13 ] ; 
226+ 	let  mut  out_pos = 0 ; 
226227	let  mut  rem_int = int; 
227228	while  rem_int != 0  { 
228- 		out_vec. push ( Fe32 :: try_from ( ( rem_int % base)  as  u8 ) . expect ( "always <32" ) ) ; 
229+ 		out[ out_pos]  = Fe32 :: try_from ( ( rem_int % base)  as  u8 ) . expect ( "always <32" ) ; 
230+ 		out_pos += 1 ; 
229231		rem_int /= base; 
230232	} 
231233
232- 	out_vec. reverse ( ) ; 
233- 	out_vec
234+ 	out. into_iter ( ) . take ( out_pos) . rev ( ) 
234235} 
235236
236237/// The length of the output of `encode_int_be_base32`. 
@@ -252,7 +253,7 @@ impl Base32Iterable for PositiveTimestamp {
252253		let  fes = encode_int_be_base32 ( self . as_unix_timestamp ( ) ) ; 
253254		debug_assert ! ( fes. len( )  <= 7 ,  "Invalid timestamp length" ) ; 
254255		let  to_pad = 7  - fes. len ( ) ; 
255- 		Box :: new ( core:: iter:: repeat ( Fe32 :: Q ) . take ( to_pad) . chain ( fes. into_iter ( ) ) ) 
256+ 		Box :: new ( core:: iter:: repeat ( Fe32 :: Q ) . take ( to_pad) . chain ( fes) ) 
256257	} 
257258} 
258259
@@ -305,7 +306,7 @@ impl Base32Len for PayeePubKey {
305306
306307impl  Base32Iterable  for  ExpiryTime  { 
307308	fn  fe_iter < ' s > ( & ' s  self )  -> Box < dyn  Iterator < Item  = Fe32 >  + ' s >  { 
308- 		Box :: new ( encode_int_be_base32 ( self . as_seconds ( ) ) . into_iter ( ) ) 
309+ 		Box :: new ( encode_int_be_base32 ( self . as_seconds ( ) ) ) 
309310	} 
310311} 
311312
@@ -317,7 +318,7 @@ impl Base32Len for ExpiryTime {
317318
318319impl  Base32Iterable  for  MinFinalCltvExpiryDelta  { 
319320	fn  fe_iter < ' s > ( & ' s  self )  -> Box < dyn  Iterator < Item  = Fe32 >  + ' s >  { 
320- 		Box :: new ( encode_int_be_base32 ( self . 0 ) . into_iter ( ) ) 
321+ 		Box :: new ( encode_int_be_base32 ( self . 0 ) ) 
321322	} 
322323} 
323324
@@ -504,6 +505,6 @@ mod test {
504505			. map ( |v| Fe32 :: try_from ( v) . expect ( "<= 31" ) ) 
505506			. collect :: < Vec < Fe32 > > ( ) ; 
506507
507- 		assert_eq ! ( expected_out,  encode_int_be_base32( input) ) ; 
508+ 		assert_eq ! ( expected_out,  encode_int_be_base32( input) . collect :: < Vec < Fe32 >> ( ) ) ; 
508509	} 
509510} 
0 commit comments