|
34 | 34 | use super::*; |
35 | 35 |
|
36 | 36 | macro_rules! impl_from { |
| 37 | + ( boxed $from:ty, $to:ty, $variant:ident, $( $cfg:tt )* ) => { |
| 38 | + $( $cfg )* |
| 39 | + impl From<$from> for $to { |
| 40 | + fn from(inner: $from) -> Self { |
| 41 | + <$to>::$variant(Box::new(inner)) |
| 42 | + } |
| 43 | + } |
| 44 | + }; |
37 | 45 | ( $from:ty, $to:ty, $variant:ident, $( $cfg:tt )* ) => { |
38 | 46 | $( $cfg )* |
39 | 47 | impl From<$from> for $to { |
@@ -68,19 +76,19 @@ pub enum AnyBlockchain { |
68 | 76 | #[cfg(feature = "electrum")] |
69 | 77 | #[cfg_attr(docsrs, doc(cfg(feature = "electrum")))] |
70 | 78 | /// Electrum client |
71 | | - Electrum(electrum::ElectrumBlockchain), |
| 79 | + Electrum(Box<electrum::ElectrumBlockchain>), |
72 | 80 | #[cfg(feature = "esplora")] |
73 | 81 | #[cfg_attr(docsrs, doc(cfg(feature = "esplora")))] |
74 | 82 | /// Esplora client |
75 | | - Esplora(esplora::EsploraBlockchain), |
| 83 | + Esplora(Box<esplora::EsploraBlockchain>), |
76 | 84 | #[cfg(feature = "compact_filters")] |
77 | 85 | #[cfg_attr(docsrs, doc(cfg(feature = "compact_filters")))] |
78 | 86 | /// Compact filters client |
79 | | - CompactFilters(compact_filters::CompactFiltersBlockchain), |
| 87 | + CompactFilters(Box<compact_filters::CompactFiltersBlockchain>), |
80 | 88 | #[cfg(feature = "rpc")] |
81 | 89 | #[cfg_attr(docsrs, doc(cfg(feature = "rpc")))] |
82 | 90 | /// RPC client |
83 | | - Rpc(rpc::RpcBlockchain), |
| 91 | + Rpc(Box<rpc::RpcBlockchain>), |
84 | 92 | } |
85 | 93 |
|
86 | 94 | #[maybe_async] |
@@ -141,10 +149,10 @@ impl WalletSync for AnyBlockchain { |
141 | 149 | } |
142 | 150 | } |
143 | 151 |
|
144 | | -impl_from!(electrum::ElectrumBlockchain, AnyBlockchain, Electrum, #[cfg(feature = "electrum")]); |
145 | | -impl_from!(esplora::EsploraBlockchain, AnyBlockchain, Esplora, #[cfg(feature = "esplora")]); |
146 | | -impl_from!(compact_filters::CompactFiltersBlockchain, AnyBlockchain, CompactFilters, #[cfg(feature = "compact_filters")]); |
147 | | -impl_from!(rpc::RpcBlockchain, AnyBlockchain, Rpc, #[cfg(feature = "rpc")]); |
| 152 | +impl_from!(boxed electrum::ElectrumBlockchain, AnyBlockchain, Electrum, #[cfg(feature = "electrum")]); |
| 153 | +impl_from!(boxed esplora::EsploraBlockchain, AnyBlockchain, Esplora, #[cfg(feature = "esplora")]); |
| 154 | +impl_from!(boxed compact_filters::CompactFiltersBlockchain, AnyBlockchain, CompactFilters, #[cfg(feature = "compact_filters")]); |
| 155 | +impl_from!(boxed rpc::RpcBlockchain, AnyBlockchain, Rpc, #[cfg(feature = "rpc")]); |
148 | 156 |
|
149 | 157 | /// Type that can contain any of the blockchain configurations defined by the library |
150 | 158 | /// |
@@ -207,19 +215,19 @@ impl ConfigurableBlockchain for AnyBlockchain { |
207 | 215 | Ok(match config { |
208 | 216 | #[cfg(feature = "electrum")] |
209 | 217 | AnyBlockchainConfig::Electrum(inner) => { |
210 | | - AnyBlockchain::Electrum(electrum::ElectrumBlockchain::from_config(inner)?) |
| 218 | + AnyBlockchain::Electrum(Box::new(electrum::ElectrumBlockchain::from_config(inner)?)) |
211 | 219 | } |
212 | 220 | #[cfg(feature = "esplora")] |
213 | 221 | AnyBlockchainConfig::Esplora(inner) => { |
214 | | - AnyBlockchain::Esplora(esplora::EsploraBlockchain::from_config(inner)?) |
| 222 | + AnyBlockchain::Esplora(Box::new(esplora::EsploraBlockchain::from_config(inner)?)) |
215 | 223 | } |
216 | 224 | #[cfg(feature = "compact_filters")] |
217 | | - AnyBlockchainConfig::CompactFilters(inner) => AnyBlockchain::CompactFilters( |
| 225 | + AnyBlockchainConfig::CompactFilters(inner) => AnyBlockchain::CompactFilters(Box::new( |
218 | 226 | compact_filters::CompactFiltersBlockchain::from_config(inner)?, |
219 | | - ), |
| 227 | + )), |
220 | 228 | #[cfg(feature = "rpc")] |
221 | 229 | AnyBlockchainConfig::Rpc(inner) => { |
222 | | - AnyBlockchain::Rpc(rpc::RpcBlockchain::from_config(inner)?) |
| 230 | + AnyBlockchain::Rpc(Box::new(rpc::RpcBlockchain::from_config(inner)?)) |
223 | 231 | } |
224 | 232 | }) |
225 | 233 | } |
|
0 commit comments