pub enum IpAddr {
V4(Ipv4Addr),
V6(Ipv6Addr),
}
Expand description
An IP address, either IPv4 or IPv6.
This enum can contain either an Ipv4Addr
or an Ipv6Addr
, see their
respective documentation for more details.
§Examples
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};
let localhost_v4 = IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1));
let localhost_v6 = IpAddr::V6(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1));
assert_eq!("127.0.0.1".parse(), Ok(localhost_v4));
assert_eq!("::1".parse(), Ok(localhost_v6));
assert_eq!(localhost_v4.is_ipv6(), false);
assert_eq!(localhost_v4.is_ipv4(), true);
Variants§
Implementations§
source§impl IpAddr
impl IpAddr
1.12.0 (const: 1.50.0) · sourcepub const fn is_unspecified(&self) -> bool
pub const fn is_unspecified(&self) -> bool
Returns true
for the special ‘unspecified’ address.
See the documentation for Ipv4Addr::is_unspecified()
and
Ipv6Addr::is_unspecified()
for more details.
§Examples
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};
assert_eq!(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)).is_unspecified(), true);
assert_eq!(IpAddr::V6(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0)).is_unspecified(), true);
1.12.0 (const: 1.50.0) · sourcepub const fn is_loopback(&self) -> bool
pub const fn is_loopback(&self) -> bool
Returns true
if this is a loopback address.
See the documentation for Ipv4Addr::is_loopback()
and
Ipv6Addr::is_loopback()
for more details.
§Examples
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};
assert_eq!(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)).is_loopback(), true);
assert_eq!(IpAddr::V6(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0x1)).is_loopback(), true);
sourcepub const fn is_global(&self) -> bool
🔬This is a nightly-only experimental API. (ip
)
pub const fn is_global(&self) -> bool
ip
)Returns true
if the address appears to be globally routable.
See the documentation for Ipv4Addr::is_global()
and
Ipv6Addr::is_global()
for more details.
§Examples
#![feature(ip)]
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};
assert_eq!(IpAddr::V4(Ipv4Addr::new(80, 9, 12, 3)).is_global(), true);
assert_eq!(IpAddr::V6(Ipv6Addr::new(0, 0, 0x1c9, 0, 0, 0xafc8, 0, 0x1)).is_global(), true);
1.12.0 (const: 1.50.0) · sourcepub const fn is_multicast(&self) -> bool
pub const fn is_multicast(&self) -> bool
Returns true
if this is a multicast address.
See the documentation for Ipv4Addr::is_multicast()
and
Ipv6Addr::is_multicast()
for more details.
§Examples
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};
assert_eq!(IpAddr::V4(Ipv4Addr::new(224, 254, 0, 0)).is_multicast(), true);
assert_eq!(IpAddr::V6(Ipv6Addr::new(0xff00, 0, 0, 0, 0, 0, 0, 0)).is_multicast(), true);
sourcepub const fn is_documentation(&self) -> bool
🔬This is a nightly-only experimental API. (ip
)
pub const fn is_documentation(&self) -> bool
ip
)Returns true
if this address is in a range designated for documentation.
See the documentation for Ipv4Addr::is_documentation()
and
Ipv6Addr::is_documentation()
for more details.
§Examples
#![feature(ip)]
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};
assert_eq!(IpAddr::V4(Ipv4Addr::new(203, 0, 113, 6)).is_documentation(), true);
assert_eq!(
IpAddr::V6(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0)).is_documentation(),
true
);
sourcepub const fn is_benchmarking(&self) -> bool
🔬This is a nightly-only experimental API. (ip
)
pub const fn is_benchmarking(&self) -> bool
ip
)Returns true
if this address is in a range designated for benchmarking.
See the documentation for Ipv4Addr::is_benchmarking()
and
Ipv6Addr::is_benchmarking()
for more details.
§Examples
#![feature(ip)]
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};
assert_eq!(IpAddr::V4(Ipv4Addr::new(198, 19, 255, 255)).is_benchmarking(), true);
assert_eq!(IpAddr::V6(Ipv6Addr::new(0x2001, 0x2, 0, 0, 0, 0, 0, 0)).is_benchmarking(), true);
1.16.0 (const: 1.50.0) · sourcepub const fn is_ipv4(&self) -> bool
pub const fn is_ipv4(&self) -> bool
Returns true
if this address is an IPv4
address, and false
otherwise.
§Examples
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};
assert_eq!(IpAddr::V4(Ipv4Addr::new(203, 0, 113, 6)).is_ipv4(), true);
assert_eq!(IpAddr::V6(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0)).is_ipv4(), false);
1.16.0 (const: 1.50.0) · sourcepub const fn is_ipv6(&self) -> bool
pub const fn is_ipv6(&self) -> bool
Returns true
if this address is an IPv6
address, and false
otherwise.
§Examples
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};
assert_eq!(IpAddr::V4(Ipv4Addr::new(203, 0, 113, 6)).is_ipv6(), false);
assert_eq!(IpAddr::V6(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0)).is_ipv6(), true);
1.75.0 (const: 1.75.0) · sourcepub const fn to_canonical(&self) -> IpAddr
pub const fn to_canonical(&self) -> IpAddr
Converts this address to an IpAddr::V4
if it is an IPv4-mapped IPv6
address, otherwise returns self
as-is.
§Examples
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};
let localhost_v4 = Ipv4Addr::new(127, 0, 0, 1);
assert_eq!(IpAddr::V4(localhost_v4).to_canonical(), localhost_v4);
assert_eq!(IpAddr::V6(localhost_v4.to_ipv6_mapped()).to_canonical(), localhost_v4);
assert_eq!(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)).to_canonical().is_loopback(), true);
assert_eq!(IpAddr::V6(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0x7f00, 0x1)).is_loopback(), false);
assert_eq!(IpAddr::V6(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0x7f00, 0x1)).to_canonical().is_loopback(), true);
source§impl IpAddr
impl IpAddr
sourcepub fn parse_ascii(b: &[u8]) -> Result<IpAddr, AddrParseError>
🔬This is a nightly-only experimental API. (addr_parse_ascii
)
pub fn parse_ascii(b: &[u8]) -> Result<IpAddr, AddrParseError>
addr_parse_ascii
)Parse an IP address from a slice of bytes.
#![feature(addr_parse_ascii)]
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};
let localhost_v4 = IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1));
let localhost_v6 = IpAddr::V6(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1));
assert_eq!(IpAddr::parse_ascii(b"127.0.0.1"), Ok(localhost_v4));
assert_eq!(IpAddr::parse_ascii(b"::1"), Ok(localhost_v6));
Trait Implementations§
§impl<'a> Arbitrary<'a> for IpAddr
impl<'a> Arbitrary<'a> for IpAddr
§fn arbitrary(u: &mut Unstructured<'a>) -> Result<IpAddr, Error>
fn arbitrary(u: &mut Unstructured<'a>) -> Result<IpAddr, Error>
Self
from the given unstructured data. Read more§fn size_hint(depth: usize) -> (usize, Option<usize>)
fn size_hint(depth: usize) -> (usize, Option<usize>)
Unstructured
this type
needs to construct itself. Read more§fn arbitrary_take_rest(u: Unstructured<'a>) -> Result<Self, Error>
fn arbitrary_take_rest(u: Unstructured<'a>) -> Result<Self, Error>
Self
from the entirety of the given
unstructured data. Read moresource§impl<'de> Deserialize<'de> for IpAddr
impl<'de> Deserialize<'de> for IpAddr
source§fn deserialize<D>(
deserializer: D,
) -> Result<IpAddr, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
fn deserialize<D>(
deserializer: D,
) -> Result<IpAddr, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
1.17.0 · source§impl From<[u16; 8]> for IpAddr
impl From<[u16; 8]> for IpAddr
source§fn from(segments: [u16; 8]) -> IpAddr
fn from(segments: [u16; 8]) -> IpAddr
Creates an IpAddr::V6
from an eight element 16-bit array.
§Examples
use std::net::{IpAddr, Ipv6Addr};
let addr = IpAddr::from([
0x20du16, 0x20cu16, 0x20bu16, 0x20au16,
0x209u16, 0x208u16, 0x207u16, 0x206u16,
]);
assert_eq!(
IpAddr::V6(Ipv6Addr::new(
0x20d, 0x20c, 0x20b, 0x20a,
0x209, 0x208, 0x207, 0x206,
)),
addr
);
1.17.0 · source§impl From<[u8; 16]> for IpAddr
impl From<[u8; 16]> for IpAddr
source§fn from(octets: [u8; 16]) -> IpAddr
fn from(octets: [u8; 16]) -> IpAddr
Creates an IpAddr::V6
from a sixteen element byte array.
§Examples
use std::net::{IpAddr, Ipv6Addr};
let addr = IpAddr::from([
0x19u8, 0x18u8, 0x17u8, 0x16u8, 0x15u8, 0x14u8, 0x13u8, 0x12u8,
0x11u8, 0x10u8, 0x0fu8, 0x0eu8, 0x0du8, 0x0cu8, 0x0bu8, 0x0au8,
]);
assert_eq!(
IpAddr::V6(Ipv6Addr::new(
0x1918, 0x1716, 0x1514, 0x1312,
0x1110, 0x0f0e, 0x0d0c, 0x0b0a,
)),
addr
);
1.7.0 · source§impl Ord for IpAddr
impl Ord for IpAddr
1.16.0 · source§impl PartialOrd<IpAddr> for Ipv4Addr
impl PartialOrd<IpAddr> for Ipv4Addr
1.16.0 · source§impl PartialOrd<IpAddr> for Ipv6Addr
impl PartialOrd<IpAddr> for Ipv6Addr
1.16.0 · source§impl PartialOrd<Ipv4Addr> for IpAddr
impl PartialOrd<Ipv4Addr> for IpAddr
1.16.0 · source§impl PartialOrd<Ipv6Addr> for IpAddr
impl PartialOrd<Ipv6Addr> for IpAddr
1.7.0 · source§impl PartialOrd for IpAddr
impl PartialOrd for IpAddr
source§impl Serialize for IpAddr
impl Serialize for IpAddr
source§fn serialize<S>(
&self,
serializer: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
fn serialize<S>(
&self,
serializer: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
impl Copy for IpAddr
impl Eq for IpAddr
impl StructuralPartialEq for IpAddr
Auto Trait Implementations§
impl Freeze for IpAddr
impl RefUnwindSafe for IpAddr
impl Send for IpAddr
impl Sync for IpAddr
impl Unpin for IpAddr
impl UnwindSafe for IpAddr
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.