@@ -8,6 +8,8 @@ use serde::{Deserialize, Serialize};
88type  IndexedTxGraphChangeSet  =
99    indexed_tx_graph:: ChangeSet < ConfirmationBlockTime ,  keychain_txout:: ChangeSet > ; 
1010
11+ use  crate :: keyring; 
12+ 
1113/// A change set for [`Wallet`] 
1214/// 
1315/// ## Definition 
@@ -101,58 +103,47 @@ type IndexedTxGraphChangeSet =
101103/// [`WalletPersister`]: crate::WalletPersister 
102104/// [`Wallet::staged`]: crate::Wallet::staged 
103105/// [`Wallet`]: crate::Wallet 
104- #[ derive( Default ,  Debug ,  Clone ,  PartialEq ,  Deserialize ,  Serialize ) ]  
105- pub  struct  ChangeSet  { 
106-     /// Descriptor for recipient addresses. 
107- pub  descriptor :  Option < Descriptor < DescriptorPublicKey > > , 
108-     /// Descriptor for change addresses. 
109- pub  change_descriptor :  Option < Descriptor < DescriptorPublicKey > > , 
110-     /// Stores the network type of the transaction data. 
111- pub  network :  Option < bitcoin:: Network > , 
106+ #[ derive( Debug ,  Clone ,  PartialEq ,  Deserialize ,  Serialize ) ]  
107+ pub  struct  ChangeSet < K :  Ord >  { 
108+     /// Stores the `KeyRing` containing the network and descriptor data. 
109+ pub  keyring :  keyring:: changeset:: ChangeSet < K > , 
112110    /// Changes to the [`LocalChain`](local_chain::LocalChain). 
113- pub  local_chain :  local_chain:: ChangeSet , 
111+ pub  chain :  local_chain:: ChangeSet , 
114112    /// Changes to [`TxGraph`](tx_graph::TxGraph). 
115113pub  tx_graph :  tx_graph:: ChangeSet < ConfirmationBlockTime > , 
116114    /// Changes to [`KeychainTxOutIndex`](keychain_txout::KeychainTxOutIndex). 
117115pub  indexer :  keychain_txout:: ChangeSet , 
118116} 
119117
120- impl  Merge  for  ChangeSet  { 
121-     /// Merge another [`ChangeSet`] into itself. 
122- fn  merge ( & mut  self ,  other :  Self )  { 
123-         if  other. descriptor . is_some ( )  { 
124-             debug_assert ! ( 
125-                 self . descriptor. is_none( )  || self . descriptor == other. descriptor, 
126-                 "descriptor must never change" 
127-             ) ; 
128-             self . descriptor  = other. descriptor ; 
129-         } 
130-         if  other. change_descriptor . is_some ( )  { 
131-             debug_assert ! ( 
132-                 self . change_descriptor. is_none( ) 
133-                     || self . change_descriptor == other. change_descriptor, 
134-                 "change descriptor must never change" 
135-             ) ; 
136-             self . change_descriptor  = other. change_descriptor ; 
137-         } 
138-         if  other. network . is_some ( )  { 
139-             debug_assert ! ( 
140-                 self . network. is_none( )  || self . network == other. network, 
141-                 "network must never change" 
142-             ) ; 
143-             self . network  = other. network ; 
118+ impl < K >  Default  for  ChangeSet < K > 
119+ where 
120+     K :  Ord , 
121+ { 
122+     fn  default ( )  -> Self  { 
123+         Self  { 
124+             keyring :  Default :: default ( ) , 
125+             chain :  Default :: default ( ) , 
126+             tx_graph :  Default :: default ( ) , 
127+             indexer :  Default :: default ( ) , 
144128        } 
129+     } 
130+ } 
145131
146-         Merge :: merge ( & mut  self . local_chain ,  other. local_chain ) ; 
132+ impl < K >  Merge  for  ChangeSet < K > 
133+ where 
134+     K :  Ord , 
135+ { 
136+     /// Merge another [`ChangeSet`] into itself. 
137+ fn  merge ( & mut  self ,  other :  Self )  { 
138+         Merge :: merge ( & mut  self . keyring ,  other. keyring ) ; 
139+         Merge :: merge ( & mut  self . chain ,  other. chain ) ; 
147140        Merge :: merge ( & mut  self . tx_graph ,  other. tx_graph ) ; 
148141        Merge :: merge ( & mut  self . indexer ,  other. indexer ) ; 
149142    } 
150143
151144    fn  is_empty ( & self )  -> bool  { 
152-         self . descriptor . is_none ( ) 
153-             && self . change_descriptor . is_none ( ) 
154-             && self . network . is_none ( ) 
155-             && self . local_chain . is_empty ( ) 
145+         self . keyring . is_empty ( ) 
146+             && self . chain . is_empty ( ) 
156147            && self . tx_graph . is_empty ( ) 
157148            && self . indexer . is_empty ( ) 
158149    } 
@@ -276,16 +267,16 @@ impl Merge for ChangeSet {
276267//     } 
277268// } 
278269
279- impl   From < local_chain:: ChangeSet >  for  ChangeSet  { 
270+ impl < K :   Ord >   From < local_chain:: ChangeSet >  for  ChangeSet < K >  { 
280271    fn  from ( chain :  local_chain:: ChangeSet )  -> Self  { 
281272        Self  { 
282-             local_chain :  chain, 
273+             chain :  chain, 
283274            ..Default :: default ( ) 
284275        } 
285276    } 
286277} 
287278
288- impl   From < IndexedTxGraphChangeSet >  for  ChangeSet  { 
279+ impl < K :   Ord >   From < IndexedTxGraphChangeSet >  for  ChangeSet < K >  { 
289280    fn  from ( indexed_tx_graph :  IndexedTxGraphChangeSet )  -> Self  { 
290281        Self  { 
291282            tx_graph :  indexed_tx_graph. tx_graph , 
@@ -295,7 +286,7 @@ impl From<IndexedTxGraphChangeSet> for ChangeSet {
295286    } 
296287} 
297288
298- impl   From < tx_graph:: ChangeSet < ConfirmationBlockTime > >  for  ChangeSet  { 
289+ impl < K :   Ord >   From < tx_graph:: ChangeSet < ConfirmationBlockTime > >  for  ChangeSet < K >  { 
299290    fn  from ( tx_graph :  tx_graph:: ChangeSet < ConfirmationBlockTime > )  -> Self  { 
300291        Self  { 
301292            tx_graph, 
@@ -304,7 +295,7 @@ impl From<tx_graph::ChangeSet<ConfirmationBlockTime>> for ChangeSet {
304295    } 
305296} 
306297
307- impl   From < keychain_txout:: ChangeSet >  for  ChangeSet  { 
298+ impl < K :   Ord >   From < keychain_txout:: ChangeSet >  for  ChangeSet < K >  { 
308299    fn  from ( indexer :  keychain_txout:: ChangeSet )  -> Self  { 
309300        Self  { 
310301            indexer, 
0 commit comments