@@ -6,10 +6,16 @@ use core::{
6
6
pin:: Pin ,
7
7
} ;
8
8
9
- use alloc:: boxed:: Box ;
9
+ use alloc:: {
10
+ boxed:: Box ,
11
+ string:: { String , ToString } ,
12
+ } ;
10
13
use chain:: Merge ;
11
14
12
- use crate :: { descriptor:: DescriptorError , ChangeSet , CreateParams , LoadParams , Wallet } ;
15
+ use crate :: {
16
+ descriptor:: { calc_checksum, DescriptorError } ,
17
+ ChangeSet , CreateParams , LoadParams , Wallet ,
18
+ } ;
13
19
14
20
/// Trait that persists [`PersistedWallet`].
15
21
///
@@ -363,16 +369,46 @@ pub enum CreateWithPersistError<E> {
363
369
impl < E : fmt:: Display > fmt:: Display for CreateWithPersistError < E > {
364
370
fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
365
371
match self {
366
- Self :: Persist ( err) => fmt:: Display :: fmt ( err, f) ,
367
- Self :: DataAlreadyExists ( changeset) => write ! (
368
- f,
369
- "Cannot create wallet in persister which already contains wallet data: {:?}" ,
370
- changeset
371
- ) ,
372
- Self :: Descriptor ( err) => fmt:: Display :: fmt ( & err, f) ,
372
+ Self :: Persist ( err) => write ! ( f, "{}" , err) ,
373
+ Self :: DataAlreadyExists ( changeset) => {
374
+ write ! (
375
+ f,
376
+ "Cannot create wallet in a persister which already contains data: {}" ,
377
+ changeset_info( changeset)
378
+ )
379
+ }
380
+ Self :: Descriptor ( err) => {
381
+ write ! ( f, "{err}" )
382
+ }
373
383
}
374
384
}
375
385
}
376
386
377
387
#[ cfg( feature = "std" ) ]
378
388
impl < E : fmt:: Debug + fmt:: Display > std:: error:: Error for CreateWithPersistError < E > { }
389
+
390
+ /// Helper function to display basic information about a [`ChangeSet`].
391
+ fn changeset_info ( changeset : & ChangeSet ) -> String {
392
+ let network = match & changeset. network {
393
+ Some ( network) => network. to_string ( ) ,
394
+ None => "None" . to_string ( ) ,
395
+ } ;
396
+
397
+ let mut checksum = String :: new ( ) ;
398
+ if let Some ( desc) = & changeset. descriptor {
399
+ if let Ok ( ck) = calc_checksum ( & desc. to_string ( ) ) {
400
+ checksum += ck. as_str ( ) ;
401
+ }
402
+ }
403
+ if let Some ( desc) = & changeset. change_descriptor {
404
+ if let Ok ( ck) = calc_checksum ( & desc. to_string ( ) ) {
405
+ checksum += ck. as_str ( ) ;
406
+ }
407
+ }
408
+ // Don't return an empty checksum
409
+ if checksum. is_empty ( ) {
410
+ checksum = "None" . to_string ( ) ;
411
+ }
412
+
413
+ format ! ( "Network: {}, Descriptor Checksum: {}" , network, checksum)
414
+ }
0 commit comments