libp2p/builder/phase/
swarm.rs1#[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 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);