@@ -600,6 +600,24 @@ impl Ipv4Addr {
600600 self . octets
601601 }
602602
603+ /// Creates an `Ipv4Addr` from a four element byte array.
604+ ///
605+ /// # Examples
606+ ///
607+ /// ```
608+ /// #![feature(ip_from)]
609+ /// use std::net::Ipv4Addr;
610+ ///
611+ /// let addr = Ipv4Addr::from_octets([13u8, 12u8, 11u8, 10u8]);
612+ /// assert_eq!(Ipv4Addr::new(13, 12, 11, 10), addr);
613+ /// ```
614+ #[ unstable( feature = "ip_from" , issue = "131360" ) ]
615+ #[ must_use]
616+ #[ inline]
617+ pub const fn from_octets ( octets : [ u8 ; 4 ] ) -> Ipv4Addr {
618+ Ipv4Addr { octets }
619+ }
620+
603621 /// Returns [`true`] for the special 'unspecified' address (`0.0.0.0`).
604622 ///
605623 /// This property is defined in _UNIX Network Programming, Second Edition_,
@@ -1400,6 +1418,34 @@ impl Ipv6Addr {
14001418 ]
14011419 }
14021420
1421+ /// Creates an `Ipv6Addr` from an eight element 16-bit array.
1422+ ///
1423+ /// # Examples
1424+ ///
1425+ /// ```
1426+ /// #![feature(ip_from)]
1427+ /// use std::net::Ipv6Addr;
1428+ ///
1429+ /// let addr = Ipv6Addr::from_segments([
1430+ /// 0x20du16, 0x20cu16, 0x20bu16, 0x20au16,
1431+ /// 0x209u16, 0x208u16, 0x207u16, 0x206u16,
1432+ /// ]);
1433+ /// assert_eq!(
1434+ /// Ipv6Addr::new(
1435+ /// 0x20d, 0x20c, 0x20b, 0x20a,
1436+ /// 0x209, 0x208, 0x207, 0x206,
1437+ /// ),
1438+ /// addr
1439+ /// );
1440+ /// ```
1441+ #[ unstable( feature = "ip_from" , issue = "131360" ) ]
1442+ #[ must_use]
1443+ #[ inline]
1444+ pub const fn from_segments ( segments : [ u16 ; 8 ] ) -> Ipv6Addr {
1445+ let [ a, b, c, d, e, f, g, h] = segments;
1446+ Ipv6Addr :: new ( a, b, c, d, e, f, g, h)
1447+ }
1448+
14031449 /// Returns [`true`] for the special 'unspecified' address (`::`).
14041450 ///
14051451 /// This property is defined in [IETF RFC 4291].
@@ -1932,7 +1978,7 @@ impl Ipv6Addr {
19321978 /// use std::net::Ipv6Addr;
19331979 ///
19341980 /// assert_eq!(Ipv6Addr::new(0xff00, 0, 0, 0, 0, 0, 0, 0).octets(),
1935- /// [255 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
1981+ /// [0xff , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
19361982 /// ```
19371983 #[ rustc_const_stable( feature = "const_ip_32" , since = "1.32.0" ) ]
19381984 #[ stable( feature = "ipv6_to_octets" , since = "1.12.0" ) ]
@@ -1941,6 +1987,33 @@ impl Ipv6Addr {
19411987 pub const fn octets ( & self ) -> [ u8 ; 16 ] {
19421988 self . octets
19431989 }
1990+
1991+ /// Creates an `Ipv6Addr` from a sixteen element byte array.
1992+ ///
1993+ /// # Examples
1994+ ///
1995+ /// ```
1996+ /// #![feature(ip_from)]
1997+ /// use std::net::Ipv6Addr;
1998+ ///
1999+ /// let addr = Ipv6Addr::from_octets([
2000+ /// 0x19u8, 0x18u8, 0x17u8, 0x16u8, 0x15u8, 0x14u8, 0x13u8, 0x12u8,
2001+ /// 0x11u8, 0x10u8, 0x0fu8, 0x0eu8, 0x0du8, 0x0cu8, 0x0bu8, 0x0au8,
2002+ /// ]);
2003+ /// assert_eq!(
2004+ /// Ipv6Addr::new(
2005+ /// 0x1918, 0x1716, 0x1514, 0x1312,
2006+ /// 0x1110, 0x0f0e, 0x0d0c, 0x0b0a,
2007+ /// ),
2008+ /// addr
2009+ /// );
2010+ /// ```
2011+ #[ unstable( feature = "ip_from" , issue = "131360" ) ]
2012+ #[ must_use]
2013+ #[ inline]
2014+ pub const fn from_octets ( octets : [ u8 ; 16 ] ) -> Ipv6Addr {
2015+ Ipv6Addr { octets }
2016+ }
19442017}
19452018
19462019/// Writes an Ipv6Addr, conforming to the canonical style described by
@@ -2113,15 +2186,13 @@ impl From<[u8; 16]> for Ipv6Addr {
21132186 /// use std::net::Ipv6Addr;
21142187 ///
21152188 /// let addr = Ipv6Addr::from([
2116- /// 25u8, 24u8, 23u8, 22u8, 21u8, 20u8, 19u8, 18u8 ,
2117- /// 17u8, 16u8, 15u8, 14u8, 13u8, 12u8, 11u8, 10u8 ,
2189+ /// 0x19u8, 0x18u8, 0x17u8, 0x16u8, 0x15u8, 0x14u8, 0x13u8, 0x12u8 ,
2190+ /// 0x11u8, 0x10u8, 0x0fu8, 0x0eu8, 0x0du8, 0x0cu8, 0x0bu8, 0x0au8 ,
21182191 /// ]);
21192192 /// assert_eq!(
21202193 /// Ipv6Addr::new(
2121- /// 0x1918, 0x1716,
2122- /// 0x1514, 0x1312,
2123- /// 0x1110, 0x0f0e,
2124- /// 0x0d0c, 0x0b0a
2194+ /// 0x1918, 0x1716, 0x1514, 0x1312,
2195+ /// 0x1110, 0x0f0e, 0x0d0c, 0x0b0a,
21252196 /// ),
21262197 /// addr
21272198 /// );
@@ -2142,15 +2213,13 @@ impl From<[u16; 8]> for Ipv6Addr {
21422213 /// use std::net::Ipv6Addr;
21432214 ///
21442215 /// let addr = Ipv6Addr::from([
2145- /// 525u16, 524u16, 523u16, 522u16 ,
2146- /// 521u16, 520u16, 519u16, 518u16 ,
2216+ /// 0x20du16, 0x20cu16, 0x20bu16, 0x20au16 ,
2217+ /// 0x209u16, 0x208u16, 0x207u16, 0x206u16 ,
21472218 /// ]);
21482219 /// assert_eq!(
21492220 /// Ipv6Addr::new(
2150- /// 0x20d, 0x20c,
2151- /// 0x20b, 0x20a,
2152- /// 0x209, 0x208,
2153- /// 0x207, 0x206
2221+ /// 0x20d, 0x20c, 0x20b, 0x20a,
2222+ /// 0x209, 0x208, 0x207, 0x206,
21542223 /// ),
21552224 /// addr
21562225 /// );
@@ -2172,15 +2241,13 @@ impl From<[u8; 16]> for IpAddr {
21722241 /// use std::net::{IpAddr, Ipv6Addr};
21732242 ///
21742243 /// let addr = IpAddr::from([
2175- /// 25u8, 24u8, 23u8, 22u8, 21u8, 20u8, 19u8, 18u8 ,
2176- /// 17u8, 16u8, 15u8, 14u8, 13u8, 12u8, 11u8, 10u8 ,
2244+ /// 0x19u8, 0x18u8, 0x17u8, 0x16u8, 0x15u8, 0x14u8, 0x13u8, 0x12u8 ,
2245+ /// 0x11u8, 0x10u8, 0x0fu8, 0x0eu8, 0x0du8, 0x0cu8, 0x0bu8, 0x0au8 ,
21772246 /// ]);
21782247 /// assert_eq!(
21792248 /// IpAddr::V6(Ipv6Addr::new(
2180- /// 0x1918, 0x1716,
2181- /// 0x1514, 0x1312,
2182- /// 0x1110, 0x0f0e,
2183- /// 0x0d0c, 0x0b0a
2249+ /// 0x1918, 0x1716, 0x1514, 0x1312,
2250+ /// 0x1110, 0x0f0e, 0x0d0c, 0x0b0a,
21842251 /// )),
21852252 /// addr
21862253 /// );
@@ -2201,15 +2268,13 @@ impl From<[u16; 8]> for IpAddr {
22012268 /// use std::net::{IpAddr, Ipv6Addr};
22022269 ///
22032270 /// let addr = IpAddr::from([
2204- /// 525u16, 524u16, 523u16, 522u16 ,
2205- /// 521u16, 520u16, 519u16, 518u16 ,
2271+ /// 0x20du16, 0x20cu16, 0x20bu16, 0x20au16 ,
2272+ /// 0x209u16, 0x208u16, 0x207u16, 0x206u16 ,
22062273 /// ]);
22072274 /// assert_eq!(
22082275 /// IpAddr::V6(Ipv6Addr::new(
2209- /// 0x20d, 0x20c,
2210- /// 0x20b, 0x20a,
2211- /// 0x209, 0x208,
2212- /// 0x207, 0x206
2276+ /// 0x20d, 0x20c, 0x20b, 0x20a,
2277+ /// 0x209, 0x208, 0x207, 0x206,
22132278 /// )),
22142279 /// addr
22152280 /// );
0 commit comments