2626use crate :: client:: { BlockchainClient , new_blockchain_client} ;
2727
2828pub enum RuntimeWallet {
29- Standard ( Wallet ) ,
29+ Standard ( Box < Wallet > ) ,
3030 #[ cfg( any( feature = "sqlite" , feature = "redb" ) ) ]
31- Persisted ( PersistedWallet < Persister > ) ,
31+ Persisted ( Box < PersistedWallet < Persister > > , Box < Persister > ) ,
3232}
3333
3434impl Deref for RuntimeWallet {
@@ -37,7 +37,7 @@ impl Deref for RuntimeWallet {
3737 match self {
3838 Self :: Standard ( wallet) => wallet,
3939 #[ cfg( any( feature = "sqlite" , feature = "redb" ) ) ]
40- Self :: Persisted ( wallet) => wallet,
40+ Self :: Persisted ( wallet, _ ) => wallet,
4141 }
4242 }
4343}
@@ -47,7 +47,20 @@ impl DerefMut for RuntimeWallet {
4747 match self {
4848 Self :: Standard ( wallet) => wallet,
4949 #[ cfg( any( feature = "sqlite" , feature = "redb" ) ) ]
50- Self :: Persisted ( wallet) => wallet,
50+ Self :: Persisted ( wallet, _) => wallet,
51+ }
52+ }
53+ }
54+
55+ impl RuntimeWallet {
56+ pub fn persist ( & mut self ) -> Result < ( ) , Error > {
57+ match self {
58+ Self :: Standard ( _) => Ok ( ( ) ) ,
59+ #[ cfg( any( feature = "sqlite" , feature = "redb" ) ) ]
60+ Self :: Persisted ( wallet, persister) => {
61+ wallet. persist ( persister) ?;
62+ Ok ( ( ) )
63+ }
5164 }
5265 }
5366}
@@ -78,25 +91,28 @@ impl WalletRuntime {
7891
7992 pub fn build_wallet ( & self , require_db : bool ) -> Result < RuntimeWallet , Error > {
8093 if !require_db {
81- return Ok ( RuntimeWallet :: Standard ( new_wallet (
94+ return Ok ( RuntimeWallet :: Standard ( Box :: new ( new_wallet (
8295 self . network ,
8396 & self . wallet_opts ,
84- ) ?) ) ;
97+ ) ?) ) ) ;
8598 }
8699
87100 #[ cfg( any( feature = "sqlite" , feature = "redb" ) ) ]
88101 {
89102 let mut persister = self . create_persister ( ) ?;
90103 let wallet = new_persisted_wallet ( self . network , & mut persister, & self . wallet_opts ) ?;
91- Ok ( RuntimeWallet :: Persisted ( wallet) )
104+ Ok ( RuntimeWallet :: Persisted (
105+ Box :: new ( wallet) ,
106+ Box :: new ( persister) ,
107+ ) )
92108 }
93109
94110 #[ cfg( not( any( feature = "sqlite" , feature = "redb" ) ) ) ]
95111 {
96- Ok ( RuntimeWallet :: Standard ( new_wallet (
112+ Ok ( RuntimeWallet :: Standard ( Box :: new ( new_wallet (
97113 self . network ,
98114 & self . wallet_opts ,
99- ) ?) )
115+ ) ?) ) )
100116 }
101117 }
102118
0 commit comments