|
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