network_libp2p/
helpers.rs

1/// Extract the peer ID from a multiaddr string, if present.
2pub fn extract_peer_id_from_multiaddr(addr: &str) -> Option<libp2p::PeerId> {
3    let addr: libp2p::Multiaddr = addr.parse().ok()?;
4    addr.iter().find_map(|proto| {
5        if let libp2p::multiaddr::Protocol::P2p(peer_id) = proto {
6            Some(peer_id)
7        } else {
8            None
9        }
10    })
11}
12
13#[cfg(test)]
14mod tests {
15    use super::*;
16
17    #[test]
18    fn extract_peer_id_from_valid_multiaddr() {
19        let addr = "/dns4/example.com/tcp/443/wss/p2p/12D3KooWGz9xtYbQ8UYj4oRmx4pD3vZvq6T5zN4pMjz6p6V7X8Y9";
20        let peer_id = extract_peer_id_from_multiaddr(addr);
21        assert!(peer_id.is_some());
22    }
23
24    #[test]
25    fn extract_peer_id_returns_none_when_missing() {
26        let addr = "/dns4/example.com/tcp/443/wss";
27        let peer_id = extract_peer_id_from_multiaddr(addr);
28        assert!(peer_id.is_none());
29    }
30}