network_libp2p/
helpers.rs1pub 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}