libp2p/builder/phase/
dns.rs1use super::*;
2use crate::SwarmBuilder;
3use std::marker::PhantomData;
4
5pub struct DnsPhase<T> {
6 pub(crate) transport: T,
7}
8
9#[cfg(all(not(target_arch = "wasm32"), feature = "async-std", feature = "dns"))]
10impl<T: AuthenticatedMultiplexedTransport> SwarmBuilder<super::provider::AsyncStd, DnsPhase<T>> {
11 pub async fn with_dns(
12 self,
13 ) -> Result<
14 SwarmBuilder<
15 super::provider::AsyncStd,
16 WebsocketPhase<impl AuthenticatedMultiplexedTransport>,
17 >,
18 std::io::Error,
19 > {
20 Ok(SwarmBuilder {
21 keypair: self.keypair,
22 phantom: PhantomData,
23 phase: WebsocketPhase {
24 transport: libp2p_dns::async_std::Transport::system(self.phase.transport).await?,
25 },
26 })
27 }
28}
29
30#[cfg(all(not(target_arch = "wasm32"), feature = "tokio", feature = "dns"))]
31impl<T: AuthenticatedMultiplexedTransport> SwarmBuilder<super::provider::Tokio, DnsPhase<T>> {
32 pub fn with_dns(
33 self,
34 ) -> Result<
35 SwarmBuilder<
36 super::provider::Tokio,
37 WebsocketPhase<impl AuthenticatedMultiplexedTransport>,
38 >,
39 std::io::Error,
40 > {
41 Ok(SwarmBuilder {
42 keypair: self.keypair,
43 phantom: PhantomData,
44 phase: WebsocketPhase {
45 transport: libp2p_dns::tokio::Transport::system(self.phase.transport)?,
46 },
47 })
48 }
49}
50
51impl<Provider, T> SwarmBuilder<Provider, DnsPhase<T>> {
52 pub(crate) fn without_dns(self) -> SwarmBuilder<Provider, WebsocketPhase<T>> {
53 SwarmBuilder {
54 keypair: self.keypair,
55 phantom: PhantomData,
56 phase: WebsocketPhase {
57 transport: self.phase.transport,
58 },
59 }
60 }
61}
62
63impl<Provider, T: AuthenticatedMultiplexedTransport> SwarmBuilder<Provider, DnsPhase<T>> {
65 pub fn with_behaviour<B, R: TryIntoBehaviour<B>>(
66 self,
67 constructor: impl FnOnce(&libp2p_identity::Keypair) -> R,
68 ) -> Result<SwarmBuilder<Provider, SwarmPhase<T, B>>, R::Error> {
69 self.without_dns()
70 .without_websocket()
71 .without_relay()
72 .with_behaviour(constructor)
73 }
74}