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);Sourcepub const fn as_octets(&self) -> &[u8] ⓘ
 🔬This is a nightly-only experimental API. (ip_as_octets)
pub const fn as_octets(&self) -> &[u8] ⓘ
ip_as_octets)Returns the eight-bit integers this address consists of as a slice.
§Examples
#![feature(ip_as_octets)]
use std::net::{Ipv4Addr, Ipv6Addr, IpAddr};
assert_eq!(IpAddr::V4(Ipv4Addr::LOCALHOST).as_octets(), &[127, 0, 0, 1]);
assert_eq!(IpAddr::V6(Ipv6Addr::LOCALHOST).as_octets(),
           &[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1])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§
Source§impl Arbitrary for IpAddr
 
impl Arbitrary for IpAddr
Source§type Parameters = ()
 
type Parameters = ()
arbitrary_with accepts for configuration
of the generated Strategy. Parameters must implement Default.Source§type Strategy = TupleUnion<((u32, Arc<MapInto<<Ipv4Addr as Arbitrary>::Strategy, IpAddr>>), (u32, Arc<MapInto<<Ipv6Addr as Arbitrary>::Strategy, IpAddr>>))>
 
type Strategy = TupleUnion<((u32, Arc<MapInto<<Ipv4Addr as Arbitrary>::Strategy, IpAddr>>), (u32, Arc<MapInto<<Ipv6Addr as Arbitrary>::Strategy, IpAddr>>))>
Strategy used to generate values of type Self.Source§fn arbitrary_with(
    _args: <IpAddr as Arbitrary>::Parameters,
) -> <IpAddr as Arbitrary>::Strategy
 
fn arbitrary_with( _args: <IpAddr as Arbitrary>::Parameters, ) -> <IpAddr as Arbitrary>::Strategy
Source§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
);Source§impl From<IpAddr> for ServerName<'_>
 
impl From<IpAddr> for ServerName<'_>
Source§fn from(addr: IpAddr) -> ServerName<'_>
 
fn from(addr: IpAddr) -> ServerName<'_>
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§impl<Q, K> Comparable<K> for Q
 
impl<Q, K> Comparable<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
 
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
 
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
 
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> Instrument for T
 
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
 
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
 
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> Pointable for T
 
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
    T: ?Sized,
 
impl<T> PolicyExt for Twhere
    T: ?Sized,
Source§impl<T> PowerToOwned for T
 
impl<T> PowerToOwned for T
Source§impl<T> ToStringFallible for Twhere
    T: Display,
 
impl<T> ToStringFallible for Twhere
    T: Display,
Source§fn try_to_string(&self) -> Result<String, TryReserveError>
 
fn try_to_string(&self) -> Result<String, TryReserveError>
ToString::to_string, but without panic on OOM.