libp2p/builder/phase/
swarm.rs

1#[allow(unused_imports)]
2use super::*;
3
4#[allow(dead_code)]
5pub struct SwarmPhase<T, B> {
6    pub(crate) behaviour: B,
7    pub(crate) transport: T,
8}
9
10macro_rules! impl_with_swarm_config {
11    ($providerKebabCase:literal, $providerPascalCase:ty, $config:expr) => {
12        #[cfg(feature = $providerKebabCase)]
13        impl<T, B> SwarmBuilder<$providerPascalCase, SwarmPhase<T, B>> {
14            pub fn with_swarm_config(
15                self,
16                constructor: impl FnOnce(libp2p_swarm::Config) -> libp2p_swarm::Config,
17            ) -> SwarmBuilder<$providerPascalCase, BuildPhase<T, B>> {
18                SwarmBuilder {
19                    phase: BuildPhase {
20                        behaviour: self.phase.behaviour,
21                        transport: self.phase.transport,
22                        swarm_config: constructor($config),
23                    },
24                    keypair: self.keypair,
25                    phantom: std::marker::PhantomData,
26                }
27            }
28
29            // Shortcuts
30            pub fn build(self) -> libp2p_swarm::Swarm<B>
31            where
32                B: libp2p_swarm::NetworkBehaviour,
33                T: AuthenticatedMultiplexedTransport,
34            {
35                self.with_swarm_config(std::convert::identity).build()
36            }
37        }
38    };
39}
40
41#[cfg(not(target_arch = "wasm32"))]
42impl_with_swarm_config!(
43    "async-std",
44    super::provider::AsyncStd,
45    libp2p_swarm::Config::with_async_std_executor()
46);
47
48#[cfg(not(target_arch = "wasm32"))]
49impl_with_swarm_config!(
50    "tokio",
51    super::provider::Tokio,
52    libp2p_swarm::Config::with_tokio_executor()
53);
54
55#[cfg(target_arch = "wasm32")]
56impl_with_swarm_config!(
57    "wasm-bindgen",
58    super::provider::WasmBindgen,
59    libp2p_swarm::Config::with_wasm_executor()
60);