diff --git a/substrate/client/network/types/src/multiaddr.rs b/substrate/client/network/types/src/multiaddr.rs index 312bef9baab1254a963d5d886994d0812ea93382..de317e2aa1cf969558480943c5059eb940f50c2c 100644 --- a/substrate/client/network/types/src/multiaddr.rs +++ b/substrate/client/network/types/src/multiaddr.rs @@ -22,6 +22,7 @@ use litep2p::types::multiaddr::{ }; use std::{ fmt::{self, Debug, Display}, + net::{IpAddr, Ipv4Addr, Ipv6Addr}, str::FromStr, }; @@ -102,6 +103,27 @@ impl From<Multiaddr> for LiteP2pMultiaddr { } } +impl From<IpAddr> for Multiaddr { + fn from(v: IpAddr) -> Multiaddr { + match v { + IpAddr::V4(a) => a.into(), + IpAddr::V6(a) => a.into(), + } + } +} + +impl From<Ipv4Addr> for Multiaddr { + fn from(v: Ipv4Addr) -> Multiaddr { + Protocol::Ip4(v).into() + } +} + +impl From<Ipv6Addr> for Multiaddr { + fn from(v: Ipv6Addr) -> Multiaddr { + Protocol::Ip6(v).into() + } +} + impl TryFrom<Vec<u8>> for Multiaddr { type Error = ParseError; diff --git a/substrate/client/network/types/src/multiaddr/protocol.rs b/substrate/client/network/types/src/multiaddr/protocol.rs index 800d08fe36bd657b855869bcb69a808961e32a5a..2a3b59e6a68235a43fef6113712af54836fc40ea 100644 --- a/substrate/client/network/types/src/multiaddr/protocol.rs +++ b/substrate/client/network/types/src/multiaddr/protocol.rs @@ -20,7 +20,7 @@ use crate::multihash::Multihash; use litep2p::types::multiaddr::Protocol as LiteP2pProtocol; use std::{ borrow::Cow, - net::{Ipv4Addr, Ipv6Addr}, + net::{IpAddr, Ipv4Addr, Ipv6Addr}, }; /// [`Protocol`] describes all possible multiaddress protocols. @@ -60,6 +60,30 @@ pub enum Protocol<'a> { Wss(Cow<'a, str>), } +impl<'a> From<IpAddr> for Protocol<'a> { + #[inline] + fn from(addr: IpAddr) -> Self { + match addr { + IpAddr::V4(addr) => Protocol::Ip4(addr), + IpAddr::V6(addr) => Protocol::Ip6(addr), + } + } +} + +impl<'a> From<Ipv4Addr> for Protocol<'a> { + #[inline] + fn from(addr: Ipv4Addr) -> Self { + Protocol::Ip4(addr) + } +} + +impl<'a> From<Ipv6Addr> for Protocol<'a> { + #[inline] + fn from(addr: Ipv6Addr) -> Self { + Protocol::Ip6(addr) + } +} + impl<'a> From<LiteP2pProtocol<'a>> for Protocol<'a> { fn from(protocol: LiteP2pProtocol<'a>) -> Self { match protocol {