libp2p/builder/phase/
build.rs

1use std::time::Duration;
2
3use libp2p_core::{transport::timeout::TransportTimeout, Transport};
4use libp2p_swarm::Swarm;
5
6#[allow(unused_imports)]
7use super::*;
8use crate::SwarmBuilder;
9
10pub struct BuildPhase<T, B> {
11    pub(crate) behaviour: B,
12    pub(crate) transport: T,
13    pub(crate) swarm_config: libp2p_swarm::Config,
14    pub(crate) connection_timeout: Duration,
15}
16
17impl<Provider, T: AuthenticatedMultiplexedTransport, B: libp2p_swarm::NetworkBehaviour>
18    SwarmBuilder<Provider, BuildPhase<T, B>>
19{
20    /// Timeout of the [`TransportTimeout`] wrapping the transport.
21    pub fn with_connection_timeout(mut self, connection_timeout: Duration) -> Self {
22        self.phase.connection_timeout = connection_timeout;
23        self
24    }
25
26    pub fn build(self) -> Swarm<B> {
27        Swarm::new(
28            TransportTimeout::new(self.phase.transport, self.phase.connection_timeout).boxed(),
29            self.phase.behaviour,
30            self.keypair.public().to_peer_id(),
31            self.phase.swarm_config,
32        )
33    }
34}