libp2p/builder/phase/
bandwidth_metrics.rs1use super::*;
2#[allow(deprecated)]
3use crate::bandwidth::BandwidthSinks;
4use crate::transport_ext::TransportExt;
5use crate::SwarmBuilder;
6use std::marker::PhantomData;
7use std::sync::Arc;
8
9pub struct BandwidthMetricsPhase<T, R> {
10 pub(crate) relay_behaviour: R,
11 pub(crate) transport: T,
12}
13
14#[cfg(feature = "metrics")]
15impl<T: AuthenticatedMultiplexedTransport, Provider, R>
16 SwarmBuilder<Provider, BandwidthMetricsPhase<T, R>>
17{
18 pub fn with_bandwidth_metrics(
19 self,
20 registry: &mut libp2p_metrics::Registry,
21 ) -> SwarmBuilder<Provider, BehaviourPhase<impl AuthenticatedMultiplexedTransport, R>> {
22 SwarmBuilder {
23 phase: BehaviourPhase {
24 relay_behaviour: self.phase.relay_behaviour,
25 transport: libp2p_metrics::BandwidthTransport::new(self.phase.transport, registry)
26 .map(|(peer_id, conn), _| (peer_id, StreamMuxerBox::new(conn))),
27 },
28 keypair: self.keypair,
29 phantom: PhantomData,
30 }
31 }
32}
33
34impl<T, Provider, R> SwarmBuilder<Provider, BandwidthMetricsPhase<T, R>> {
35 pub fn without_bandwidth_metrics(self) -> SwarmBuilder<Provider, BehaviourPhase<T, R>> {
36 SwarmBuilder {
37 phase: BehaviourPhase {
38 relay_behaviour: self.phase.relay_behaviour,
39 transport: self.phase.transport,
40 },
41 keypair: self.keypair,
42 phantom: PhantomData,
43 }
44 }
45}
46
47#[cfg(feature = "relay")]
49impl<Provider, T: AuthenticatedMultiplexedTransport>
50 SwarmBuilder<Provider, BandwidthMetricsPhase<T, libp2p_relay::client::Behaviour>>
51{
52 pub fn with_behaviour<B, R: TryIntoBehaviour<B>>(
53 self,
54 constructor: impl FnOnce(&libp2p_identity::Keypair, libp2p_relay::client::Behaviour) -> R,
55 ) -> Result<SwarmBuilder<Provider, SwarmPhase<T, B>>, R::Error> {
56 self.without_bandwidth_metrics().with_behaviour(constructor)
57 }
58}
59
60impl<Provider, T: AuthenticatedMultiplexedTransport>
61 SwarmBuilder<Provider, BandwidthMetricsPhase<T, NoRelayBehaviour>>
62{
63 pub fn with_behaviour<B, R: TryIntoBehaviour<B>>(
64 self,
65 constructor: impl FnOnce(&libp2p_identity::Keypair) -> R,
66 ) -> Result<SwarmBuilder<Provider, SwarmPhase<T, B>>, R::Error> {
67 self.without_bandwidth_metrics().with_behaviour(constructor)
68 }
69}