1
+ use crate :: prelude:: * ;
2
+ use bech32:: { u5, Base32Len , ToBase32 , WriteBase32 } ;
1
3
use core:: fmt;
2
4
use core:: fmt:: { Display , Formatter } ;
3
- use bech32:: { ToBase32 , u5, WriteBase32 , Base32Len } ;
4
- use crate :: prelude:: * ;
5
5
6
- use super :: { Bolt11Invoice , Sha256 , TaggedField , ExpiryTime , MinFinalCltvExpiryDelta , Fallback , PayeePubKey , Bolt11InvoiceSignature , PositiveTimestamp ,
7
- PrivateRoute , Description , RawTaggedField , Currency , RawHrp , SiPrefix , constants, SignedRawBolt11Invoice , RawDataPart } ;
6
+ use super :: {
7
+ constants, Bolt11Invoice , Bolt11InvoiceSignature , Currency , Description , ExpiryTime , Fallback ,
8
+ MinFinalCltvExpiryDelta , PayeePubKey , PositiveTimestamp , PrivateRoute , RawDataPart , RawHrp ,
9
+ RawTaggedField , Sha256 , SiPrefix , SignedRawBolt11Invoice , TaggedField ,
10
+ } ;
8
11
9
12
/// Converts a stream of bytes written to it to base32. On finalization the according padding will
10
13
/// be applied. That means the results of writing two data blocks with one or two `BytesToBase32`
@@ -24,11 +27,7 @@ impl<'a, W: WriteBase32> BytesToBase32<'a, W> {
24
27
/// Create a new bytes-to-base32 converter with `writer` as a sink for the resulting base32
25
28
/// data.
26
29
pub fn new ( writer : & ' a mut W ) -> BytesToBase32 < ' a , W > {
27
- BytesToBase32 {
28
- writer,
29
- buffer : 0 ,
30
- buffer_bits : 0 ,
31
- }
30
+ BytesToBase32 { writer, buffer : 0 , buffer_bits : 0 }
32
31
}
33
32
34
33
/// Add more bytes to the current conversion unit
@@ -44,9 +43,7 @@ impl<'a, W: WriteBase32> BytesToBase32<'a, W> {
44
43
// buffer holds too many bits, so we don't have to combine buffer bits with new bits
45
44
// from this rounds byte.
46
45
if self . buffer_bits >= 5 {
47
- self . writer . write_u5 (
48
- u5:: try_from_u8 ( ( self . buffer & 0b11111000 ) >> 3 ) . expect ( "<32" )
49
- ) ?;
46
+ self . writer . write_u5 ( u5:: try_from_u8 ( ( self . buffer & 0b11111000 ) >> 3 ) . expect ( "<32" ) ) ?;
50
47
self . buffer <<= 5 ;
51
48
self . buffer_bits -= 5 ;
52
49
}
@@ -63,18 +60,16 @@ impl<'a, W: WriteBase32> BytesToBase32<'a, W> {
63
60
Ok ( ( ) )
64
61
}
65
62
66
- pub fn finalize ( mut self ) -> Result < ( ) , W :: Err > {
63
+ pub fn finalize ( mut self ) -> Result < ( ) , W :: Err > {
67
64
self . inner_finalize ( ) ?;
68
65
core:: mem:: forget ( self ) ;
69
66
Ok ( ( ) )
70
67
}
71
68
72
- fn inner_finalize ( & mut self ) -> Result < ( ) , W :: Err > {
69
+ fn inner_finalize ( & mut self ) -> Result < ( ) , W :: Err > {
73
70
// There can be at most two u5s left in the buffer after processing all bytes, write them.
74
71
if self . buffer_bits >= 5 {
75
- self . writer . write_u5 (
76
- u5:: try_from_u8 ( ( self . buffer & 0b11111000 ) >> 3 ) . expect ( "<32" )
77
- ) ?;
72
+ self . writer . write_u5 ( u5:: try_from_u8 ( ( self . buffer & 0b11111000 ) >> 3 ) . expect ( "<32" ) ) ?;
78
73
self . buffer <<= 5 ;
79
74
self . buffer_bits -= 5 ;
80
75
}
@@ -115,7 +110,7 @@ impl Display for Bolt11Invoice {
115
110
impl Display for SignedRawBolt11Invoice {
116
111
fn fmt ( & self , f : & mut Formatter ) -> Result < ( ) , fmt:: Error > {
117
112
let hrp = self . raw_invoice . hrp . to_string ( ) ;
118
- let mut data = self . raw_invoice . data . to_base32 ( ) ;
113
+ let mut data = self . raw_invoice . data . to_base32 ( ) ;
119
114
data. extend_from_slice ( & self . signature . to_base32 ( ) ) ;
120
115
121
116
bech32:: encode_to_fmt ( f, & hrp, data, bech32:: Variant :: Bech32 ) . expect ( "HRP is valid" ) ?;
@@ -137,13 +132,7 @@ impl Display for RawHrp {
137
132
None => String :: new ( ) ,
138
133
} ;
139
134
140
- write ! (
141
- f,
142
- "ln{}{}{}" ,
143
- self . currency,
144
- amount,
145
- si_prefix
146
- )
135
+ write ! ( f, "ln{}{}{}" , self . currency, amount, si_prefix)
147
136
}
148
137
}
149
138
@@ -162,7 +151,9 @@ impl Display for Currency {
162
151
163
152
impl Display for SiPrefix {
164
153
fn fmt ( & self , f : & mut Formatter ) -> Result < ( ) , fmt:: Error > {
165
- write ! ( f, "{}" ,
154
+ write ! (
155
+ f,
156
+ "{}" ,
166
157
match * self {
167
158
SiPrefix :: Milli => "m" ,
168
159
SiPrefix :: Micro => "u" ,
@@ -215,7 +206,8 @@ fn encode_int_be_base256<T: Into<u64>>(int: T) -> Vec<u8> {
215
206
/// Appends the default value of `T` to the front of the `in_vec` till it reaches the length
216
207
/// `target_length`. If `in_vec` already is too lang `None` is returned.
217
208
fn try_stretch < T > ( mut in_vec : Vec < T > , target_len : usize ) -> Option < Vec < T > >
218
- where T : Default + Copy
209
+ where
210
+ T : Default + Copy ,
219
211
{
220
212
if in_vec. len ( ) > target_len {
221
213
None
@@ -248,20 +240,16 @@ impl ToBase32 for PositiveTimestamp {
248
240
// FIXME: use writer for int encoding
249
241
writer. write (
250
242
& try_stretch ( encode_int_be_base32 ( self . as_unix_timestamp ( ) ) , 7 )
251
- . expect ( "Can't be longer due than 7 u5s due to timestamp bounds" )
243
+ . expect ( "Can't be longer due than 7 u5s due to timestamp bounds" ) ,
252
244
)
253
245
}
254
246
}
255
247
256
248
impl ToBase32 for RawTaggedField {
257
249
fn write_base32 < W : WriteBase32 > ( & self , writer : & mut W ) -> Result < ( ) , <W as WriteBase32 >:: Err > {
258
250
match * self {
259
- RawTaggedField :: UnknownSemantics ( ref content) => {
260
- writer. write ( content)
261
- } ,
262
- RawTaggedField :: KnownSemantics ( ref tagged_field) => {
263
- tagged_field. write_base32 ( writer)
264
- }
251
+ RawTaggedField :: UnknownSemantics ( ref content) => writer. write ( content) ,
252
+ RawTaggedField :: KnownSemantics ( ref tagged_field) => tagged_field. write_base32 ( writer) ,
265
253
}
266
254
}
267
255
}
@@ -279,13 +267,13 @@ impl Base32Len for Sha256 {
279
267
280
268
impl ToBase32 for Description {
281
269
fn write_base32 < W : WriteBase32 > ( & self , writer : & mut W ) -> Result < ( ) , <W as WriteBase32 >:: Err > {
282
- self . 0 . 0 . as_bytes ( ) . write_base32 ( writer)
270
+ self . 0 . 0 . as_bytes ( ) . write_base32 ( writer)
283
271
}
284
272
}
285
273
286
274
impl Base32Len for Description {
287
275
fn base32_len ( & self ) -> usize {
288
- self . 0 . 0 . as_bytes ( ) . base32_len ( )
276
+ self . 0 . 0 . as_bytes ( ) . base32_len ( )
289
277
}
290
278
}
291
279
@@ -328,7 +316,7 @@ impl Base32Len for MinFinalCltvExpiryDelta {
328
316
impl ToBase32 for Fallback {
329
317
fn write_base32 < W : WriteBase32 > ( & self , writer : & mut W ) -> Result < ( ) , <W as WriteBase32 >:: Err > {
330
318
match * self {
331
- Fallback :: SegWitProgram { version : v, program : ref p} => {
319
+ Fallback :: SegWitProgram { version : v, program : ref p } => {
332
320
writer. write_u5 ( u5:: try_from_u8 ( v. to_num ( ) ) . expect ( "witness version <= 16" ) ) ?;
333
321
p. write_base32 ( writer)
334
322
} ,
@@ -339,20 +327,18 @@ impl ToBase32 for Fallback {
339
327
Fallback :: ScriptHash ( ref hash) => {
340
328
writer. write_u5 ( u5:: try_from_u8 ( 18 ) . expect ( "18 < 32" ) ) ?;
341
329
( & hash[ ..] ) . write_base32 ( writer)
342
- }
330
+ } ,
343
331
}
344
332
}
345
333
}
346
334
347
335
impl Base32Len for Fallback {
348
336
fn base32_len ( & self ) -> usize {
349
337
match * self {
350
- Fallback :: SegWitProgram { program : ref p, ..} => {
338
+ Fallback :: SegWitProgram { program : ref p, .. } => {
351
339
bytes_size_to_base32_size ( p. len ( ) ) + 1
352
340
} ,
353
- Fallback :: PubKeyHash ( _) | Fallback :: ScriptHash ( _) => {
354
- 33
355
- } ,
341
+ Fallback :: PubKeyHash ( _) | Fallback :: ScriptHash ( _) => 33 ,
356
342
}
357
343
}
358
344
}
@@ -363,28 +349,21 @@ impl ToBase32 for PrivateRoute {
363
349
364
350
for hop in ( self . 0 ) . 0 . iter ( ) {
365
351
converter. append ( & hop. src_node_id . serialize ( ) [ ..] ) ?;
366
- let short_channel_id = try_stretch (
367
- encode_int_be_base256 ( hop. short_channel_id ) ,
368
- 8
369
- ) . expect ( "sizeof(u64) == 8" ) ;
352
+ let short_channel_id = try_stretch ( encode_int_be_base256 ( hop. short_channel_id ) , 8 )
353
+ . expect ( "sizeof(u64) == 8" ) ;
370
354
converter. append ( & short_channel_id) ?;
371
355
372
- let fee_base_msat = try_stretch (
373
- encode_int_be_base256 ( hop. fees . base_msat ) ,
374
- 4
375
- ) . expect ( "sizeof(u32) == 4" ) ;
356
+ let fee_base_msat = try_stretch ( encode_int_be_base256 ( hop. fees . base_msat ) , 4 )
357
+ . expect ( "sizeof(u32) == 4" ) ;
376
358
converter. append ( & fee_base_msat) ?;
377
359
378
- let fee_proportional_millionths = try_stretch (
379
- encode_int_be_base256 ( hop. fees . proportional_millionths ) ,
380
- 4
381
- ) . expect ( "sizeof(u32) == 4" ) ;
360
+ let fee_proportional_millionths =
361
+ try_stretch ( encode_int_be_base256 ( hop. fees . proportional_millionths ) , 4 )
362
+ . expect ( "sizeof(u32) == 4" ) ;
382
363
converter. append ( & fee_proportional_millionths) ?;
383
364
384
- let cltv_expiry_delta = try_stretch (
385
- encode_int_be_base256 ( hop. cltv_expiry_delta ) ,
386
- 2
387
- ) . expect ( "sizeof(u16) == 2" ) ;
365
+ let cltv_expiry_delta = try_stretch ( encode_int_be_base256 ( hop. cltv_expiry_delta ) , 2 )
366
+ . expect ( "sizeof(u16) == 2" ) ;
388
367
converter. append ( & cltv_expiry_delta) ?;
389
368
}
390
369
@@ -404,17 +383,18 @@ impl ToBase32 for TaggedField {
404
383
/// Writes a tagged field: tag, length and data. `tag` should be in `0..32` otherwise the
405
384
/// function will panic.
406
385
fn write_tagged_field < W , P > ( writer : & mut W , tag : u8 , payload : & P ) -> Result < ( ) , W :: Err >
407
- where W : WriteBase32 ,
408
- P : ToBase32 + Base32Len ,
386
+ where
387
+ W : WriteBase32 ,
388
+ P : ToBase32 + Base32Len ,
409
389
{
410
390
let len = payload. base32_len ( ) ;
411
391
assert ! ( len < 1024 , "Every tagged field data can be at most 1023 bytes long." ) ;
412
392
413
393
writer. write_u5 ( u5:: try_from_u8 ( tag) . expect ( "invalid tag, not in 0..32" ) ) ?;
414
- writer. write ( & try_stretch (
415
- encode_int_be_base32 ( len as u64 ) ,
416
- 2
417
- ) . expect ( "Can't be longer than 2, see assert above." ) ) ?;
394
+ writer. write (
395
+ & try_stretch ( encode_int_be_base32 ( len as u64 ) , 2 )
396
+ . expect ( "Can't be longer than 2, see assert above." ) ,
397
+ ) ?;
418
398
payload. write_base32 ( writer)
419
399
}
420
400
@@ -444,10 +424,10 @@ impl ToBase32 for TaggedField {
444
424
write_tagged_field ( writer, constants:: TAG_PRIVATE_ROUTE , route_hops)
445
425
} ,
446
426
TaggedField :: PaymentSecret ( ref payment_secret) => {
447
- write_tagged_field ( writer, constants:: TAG_PAYMENT_SECRET , payment_secret)
427
+ write_tagged_field ( writer, constants:: TAG_PAYMENT_SECRET , payment_secret)
448
428
} ,
449
429
TaggedField :: PaymentMetadata ( ref payment_metadata) => {
450
- write_tagged_field ( writer, constants:: TAG_PAYMENT_METADATA , payment_metadata)
430
+ write_tagged_field ( writer, constants:: TAG_PAYMENT_METADATA , payment_metadata)
451
431
} ,
452
432
TaggedField :: Features ( ref features) => {
453
433
write_tagged_field ( writer, constants:: TAG_FEATURES , features)
0 commit comments