libp2p_metrics/
protocol_stack.rs

1use libp2p_core::multiaddr::Multiaddr;
2
3pub(crate) fn as_string(ma: &Multiaddr) -> String {
4    let len = ma
5        .protocol_stack()
6        .fold(0, |acc, proto| acc + proto.len() + 1);
7    let mut protocols = String::with_capacity(len);
8    for proto_tag in ma.protocol_stack() {
9        protocols.push('/');
10        protocols.push_str(proto_tag);
11    }
12    protocols
13}
14
15#[cfg(test)]
16mod tests {
17    use super::*;
18
19    #[test]
20    fn ip6_tcp_wss_p2p() {
21        let ma = Multiaddr::try_from("/ip6/2001:8a0:7ac5:4201:3ac9:86ff:fe31:7095/tcp/8000/wss/p2p/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSupNKC").expect("testbad");
22
23        let protocol_stack = as_string(&ma);
24
25        assert_eq!(protocol_stack, "/ip6/tcp/wss/p2p");
26
27        let ma = Multiaddr::try_from("/ip6/2001:8a0:7ac5:4201:3ac9:86ff:fe31:7095/tcp/8000/tls/ws/p2p/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSupNKC").expect("testbad");
28
29        let protocol_stack = as_string(&ma);
30
31        assert_eq!(protocol_stack, "/ip6/tcp/tls/ws/p2p");
32    }
33}