[][src]Struct elastic_types::ip::Ip

pub struct Ip<TMapping> where
    TMapping: IpMapping
{ /* fields omitted */ }

An Elasticsearch ip with a mapping.

Where the mapping isn't custom, you can use the standard library Ipv4Addr instead.

Examples

Defining an ip with a mapping:

use std::net::Ipv4Addr;
use elastic_types::ip::mapping::DefaultIpMapping;
use elastic_types::ip::Ip;

let ip = Ip::<DefaultIpMapping>::new(Ipv4Addr::new(127, 0, 0, 1));

Methods

impl<TMapping> Ip<TMapping> where
    TMapping: IpMapping
[src]

pub fn new<I>(ip: I) -> Ip<TMapping> where
    I: Into<Ipv4Addr>, 
[src]

Creates a new Ip with the given mapping.

Examples

Create a new Ip from a Ip4vAddr:

use std::net::Ipv4Addr;
use elastic_types::ip::mapping::DefaultIpMapping;
use elastic_types::ip::Ip;

let ip = Ip::<DefaultIpMapping>::new(Ipv4Addr::new(127, 0, 0, 1));

pub fn remap<TNewMapping>(ip: Ip<TMapping>) -> Ip<TNewMapping> where
    TNewMapping: IpMapping
[src]

Change the mapping of this ip.

Examples

Change the mapping for a given Ip:

let es_ip = Ip::<DefaultIpMapping>::new(Ipv4Addr::new(127, 0, 0, 1));

let ip: Ip<MyIpMapping> = Ip::remap(es_ip);

Methods from Deref<Target = Ipv4Addr>

pub const LOCALHOST: Ipv4Addr
1.30.0
[src]

pub const UNSPECIFIED: Ipv4Addr
1.30.0
[src]

pub const BROADCAST: Ipv4Addr
1.30.0
[src]

pub fn octets(&self) -> [u8; 4]
1.0.0
[src]

Returns the four eight-bit integers that make up this address.

Examples

use std::net::Ipv4Addr;

let addr = Ipv4Addr::new(127, 0, 0, 1);
assert_eq!(addr.octets(), [127, 0, 0, 1]);

pub const fn is_unspecified(&self) -> bool
1.12.0
[src]

Returns true for the special 'unspecified' address (0.0.0.0).

This property is defined in UNIX Network Programming, Second Edition, W. Richard Stevens, p. 891; see also ip7.

Examples

use std::net::Ipv4Addr;

assert_eq!(Ipv4Addr::new(0, 0, 0, 0).is_unspecified(), true);
assert_eq!(Ipv4Addr::new(45, 22, 13, 197).is_unspecified(), false);

pub fn is_loopback(&self) -> bool
1.7.0
[src]

Returns true if this is a loopback address (127.0.0.0/8).

This property is defined by IETF RFC 1122.

Examples

use std::net::Ipv4Addr;

assert_eq!(Ipv4Addr::new(127, 0, 0, 1).is_loopback(), true);
assert_eq!(Ipv4Addr::new(45, 22, 13, 197).is_loopback(), false);

pub fn is_private(&self) -> bool
1.7.0
[src]

Returns true if this is a private address.

The private address ranges are defined in IETF RFC 1918 and include:

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16

Examples

use std::net::Ipv4Addr;

assert_eq!(Ipv4Addr::new(10, 0, 0, 1).is_private(), true);
assert_eq!(Ipv4Addr::new(10, 10, 10, 10).is_private(), true);
assert_eq!(Ipv4Addr::new(172, 16, 10, 10).is_private(), true);
assert_eq!(Ipv4Addr::new(172, 29, 45, 14).is_private(), true);
assert_eq!(Ipv4Addr::new(172, 32, 0, 2).is_private(), false);
assert_eq!(Ipv4Addr::new(192, 168, 0, 2).is_private(), true);
assert_eq!(Ipv4Addr::new(192, 169, 0, 2).is_private(), false);

Returns true if the address is link-local (169.254.0.0/16).

This property is defined by IETF RFC 3927.

Examples

use std::net::Ipv4Addr;

assert_eq!(Ipv4Addr::new(169, 254, 0, 0).is_link_local(), true);
assert_eq!(Ipv4Addr::new(169, 254, 10, 65).is_link_local(), true);
assert_eq!(Ipv4Addr::new(16, 89, 10, 65).is_link_local(), false);

pub fn is_global(&self) -> bool[src]

🔬 This is a nightly-only experimental API. (ip)

extra functionality has not been scrutinized to the level that it should be to be stable

Returns true if the address appears to be globally routable. See iana-ipv4-special-registry.

The following return false:

  • private address (10.0.0.0/8, 172.16.0.0/12 and 192.168.0.0/16)
  • the loopback address (127.0.0.0/8)
  • the link-local address (169.254.0.0/16)
  • the broadcast address (255.255.255.255/32)
  • test addresses used for documentation (192.0.2.0/24, 198.51.100.0/24 and 203.0.113.0/24)
  • the unspecified address (0.0.0.0)

Examples

#![feature(ip)]

use std::net::Ipv4Addr;

fn main() {
    assert_eq!(Ipv4Addr::new(10, 254, 0, 0).is_global(), false);
    assert_eq!(Ipv4Addr::new(192, 168, 10, 65).is_global(), false);
    assert_eq!(Ipv4Addr::new(172, 16, 10, 65).is_global(), false);
    assert_eq!(Ipv4Addr::new(0, 0, 0, 0).is_global(), false);
    assert_eq!(Ipv4Addr::new(80, 9, 12, 3).is_global(), true);
}

pub fn is_multicast(&self) -> bool
1.7.0
[src]

Returns true if this is a multicast address (224.0.0.0/4).

Multicast addresses have a most significant octet between 224 and 239, and is defined by IETF RFC 5771.

Examples

use std::net::Ipv4Addr;

assert_eq!(Ipv4Addr::new(224, 254, 0, 0).is_multicast(), true);
assert_eq!(Ipv4Addr::new(236, 168, 10, 65).is_multicast(), true);
assert_eq!(Ipv4Addr::new(172, 16, 10, 65).is_multicast(), false);

pub fn is_broadcast(&self) -> bool
1.7.0
[src]

Returns true if this is a broadcast address (255.255.255.255).

A broadcast address has all octets set to 255 as defined in IETF RFC 919.

Examples

use std::net::Ipv4Addr;

assert_eq!(Ipv4Addr::new(255, 255, 255, 255).is_broadcast(), true);
assert_eq!(Ipv4Addr::new(236, 168, 10, 65).is_broadcast(), false);

pub fn is_documentation(&self) -> bool
1.7.0
[src]

Returns true if this address is in a range designated for documentation.

This is defined in IETF RFC 5737:

  • 192.0.2.0/24 (TEST-NET-1)
  • 198.51.100.0/24 (TEST-NET-2)
  • 203.0.113.0/24 (TEST-NET-3)

Examples

use std::net::Ipv4Addr;

assert_eq!(Ipv4Addr::new(192, 0, 2, 255).is_documentation(), true);
assert_eq!(Ipv4Addr::new(198, 51, 100, 65).is_documentation(), true);
assert_eq!(Ipv4Addr::new(203, 0, 113, 6).is_documentation(), true);
assert_eq!(Ipv4Addr::new(193, 34, 17, 19).is_documentation(), false);

pub fn to_ipv6_compatible(&self) -> Ipv6Addr
1.0.0
[src]

Converts this address to an IPv4-compatible IPv6 address.

a.b.c.d becomes ::a.b.c.d

Examples

use std::net::{Ipv4Addr, Ipv6Addr};

assert_eq!(Ipv4Addr::new(192, 0, 2, 255).to_ipv6_compatible(),
           Ipv6Addr::new(0, 0, 0, 0, 0, 0, 49152, 767));

pub fn to_ipv6_mapped(&self) -> Ipv6Addr
1.0.0
[src]

Converts this address to an IPv4-mapped IPv6 address.

a.b.c.d becomes ::ffff:a.b.c.d

Examples

use std::net::{Ipv4Addr, Ipv6Addr};

assert_eq!(Ipv4Addr::new(192, 0, 2, 255).to_ipv6_mapped(),
           Ipv6Addr::new(0, 0, 0, 0, 0, 65535, 49152, 767));

Trait Implementations

impl<TMapping> IpFieldType<TMapping> for Ip<TMapping> where
    TMapping: IpMapping
[src]

impl<TMapping: Clone> Clone for Ip<TMapping> where
    TMapping: IpMapping
[src]

fn clone_from(&mut self, source: &Self)
1.0.0
[src]

Performs copy-assignment from source. Read more

impl<TMapping: PartialEq> PartialEq<Ip<TMapping>> for Ip<TMapping> where
    TMapping: IpMapping
[src]

impl<M> PartialEq<Ipv4Addr> for Ip<M> where
    M: IpMapping
[src]

impl<M> PartialEq<Ip<M>> for Ipv4Addr where
    M: IpMapping
[src]

impl<M> From<Ipv4Addr> for Ip<M> where
    M: IpMapping
[src]

impl<TMapping: Debug> Debug for Ip<TMapping> where
    TMapping: IpMapping
[src]

impl<M> Deref for Ip<M> where
    M: IpMapping
[src]

type Target = Ipv4Addr

The resulting type after dereferencing.

impl<M> Borrow<Ipv4Addr> for Ip<M> where
    M: IpMapping
[src]

impl<TMapping> Serialize for Ip<TMapping> where
    TMapping: IpMapping
[src]

impl<'de, TMapping> Deserialize<'de> for Ip<TMapping> where
    TMapping: IpMapping
[src]

Auto Trait Implementations

impl<TMapping> Send for Ip<TMapping> where
    TMapping: Send

impl<TMapping> Sync for Ip<TMapping> where
    TMapping: Sync

Blanket Implementations

impl<T, U> Into for T where
    U: From<T>, 
[src]

impl<T> From for T[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

impl<T, U> TryFrom for T where
    U: Into<T>, 
[src]

type Error = !

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.

impl<T> Borrow for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> BorrowMut for T where
    T: ?Sized
[src]

impl<T, U> TryInto for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.

impl<T> DeserializeOwned for T where
    T: Deserialize<'de>, 
[src]

impl<T> Same for T

type Output = T

Should always be Self

impl<SS, SP> SupersetOf for SP where
    SS: SubsetOf<SP>,