@@ -295,7 +295,6 @@ impl IpAddr {
295
295
/// assert_eq!(IpAddr::V4(Ipv4Addr::new(80, 9, 12, 3)).is_global(), true);
296
296
/// assert_eq!(IpAddr::V6(Ipv6Addr::new(0, 0, 0x1c9, 0, 0, 0xafc8, 0, 0x1)).is_global(), true);
297
297
/// ```
298
- #[ rustc_const_unstable( feature = "const_ip" , issue = "76205" ) ]
299
298
#[ unstable( feature = "ip" , issue = "27709" ) ]
300
299
#[ must_use]
301
300
#[ inline]
@@ -348,7 +347,6 @@ impl IpAddr {
348
347
/// true
349
348
/// );
350
349
/// ```
351
- #[ rustc_const_unstable( feature = "const_ip" , issue = "76205" ) ]
352
350
#[ unstable( feature = "ip" , issue = "27709" ) ]
353
351
#[ must_use]
354
352
#[ inline]
@@ -600,6 +598,24 @@ impl Ipv4Addr {
600
598
self . octets
601
599
}
602
600
601
+ /// Creates an `Ipv4Addr` from a four element byte array.
602
+ ///
603
+ /// # Examples
604
+ ///
605
+ /// ```
606
+ /// #![feature(ip_from)]
607
+ /// use std::net::Ipv4Addr;
608
+ ///
609
+ /// let addr = Ipv4Addr::from_octets([13u8, 12u8, 11u8, 10u8]);
610
+ /// assert_eq!(Ipv4Addr::new(13, 12, 11, 10), addr);
611
+ /// ```
612
+ #[ unstable( feature = "ip_from" , issue = "131360" ) ]
613
+ #[ must_use]
614
+ #[ inline]
615
+ pub const fn from_octets ( octets : [ u8 ; 4 ] ) -> Ipv4Addr {
616
+ Ipv4Addr { octets }
617
+ }
618
+
603
619
/// Returns [`true`] for the special 'unspecified' address (`0.0.0.0`).
604
620
///
605
621
/// This property is defined in _UNIX Network Programming, Second Edition_,
@@ -776,7 +792,6 @@ impl Ipv4Addr {
776
792
///
777
793
/// // For a complete overview see the IANA IPv4 Special-Purpose Address Registry.
778
794
/// ```
779
- #[ rustc_const_unstable( feature = "const_ipv4" , issue = "76205" ) ]
780
795
#[ unstable( feature = "ip" , issue = "27709" ) ]
781
796
#[ must_use]
782
797
#[ inline]
@@ -813,7 +828,6 @@ impl Ipv4Addr {
813
828
/// assert_eq!(Ipv4Addr::new(100, 127, 255, 255).is_shared(), true);
814
829
/// assert_eq!(Ipv4Addr::new(100, 128, 0, 0).is_shared(), false);
815
830
/// ```
816
- #[ rustc_const_unstable( feature = "const_ipv4" , issue = "76205" ) ]
817
831
#[ unstable( feature = "ip" , issue = "27709" ) ]
818
832
#[ must_use]
819
833
#[ inline]
@@ -841,7 +855,6 @@ impl Ipv4Addr {
841
855
/// assert_eq!(Ipv4Addr::new(198, 19, 255, 255).is_benchmarking(), true);
842
856
/// assert_eq!(Ipv4Addr::new(198, 20, 0, 0).is_benchmarking(), false);
843
857
/// ```
844
- #[ rustc_const_unstable( feature = "const_ipv4" , issue = "76205" ) ]
845
858
#[ unstable( feature = "ip" , issue = "27709" ) ]
846
859
#[ must_use]
847
860
#[ inline]
@@ -878,7 +891,6 @@ impl Ipv4Addr {
878
891
/// // The broadcast address is not considered as reserved for future use by this implementation
879
892
/// assert_eq!(Ipv4Addr::new(255, 255, 255, 255).is_reserved(), false);
880
893
/// ```
881
- #[ rustc_const_unstable( feature = "const_ipv4" , issue = "76205" ) ]
882
894
#[ unstable( feature = "ip" , issue = "27709" ) ]
883
895
#[ must_use]
884
896
#[ inline]
@@ -1400,6 +1412,34 @@ impl Ipv6Addr {
1400
1412
]
1401
1413
}
1402
1414
1415
+ /// Creates an `Ipv6Addr` from an eight element 16-bit array.
1416
+ ///
1417
+ /// # Examples
1418
+ ///
1419
+ /// ```
1420
+ /// #![feature(ip_from)]
1421
+ /// use std::net::Ipv6Addr;
1422
+ ///
1423
+ /// let addr = Ipv6Addr::from_segments([
1424
+ /// 0x20du16, 0x20cu16, 0x20bu16, 0x20au16,
1425
+ /// 0x209u16, 0x208u16, 0x207u16, 0x206u16,
1426
+ /// ]);
1427
+ /// assert_eq!(
1428
+ /// Ipv6Addr::new(
1429
+ /// 0x20d, 0x20c, 0x20b, 0x20a,
1430
+ /// 0x209, 0x208, 0x207, 0x206,
1431
+ /// ),
1432
+ /// addr
1433
+ /// );
1434
+ /// ```
1435
+ #[ unstable( feature = "ip_from" , issue = "131360" ) ]
1436
+ #[ must_use]
1437
+ #[ inline]
1438
+ pub const fn from_segments ( segments : [ u16 ; 8 ] ) -> Ipv6Addr {
1439
+ let [ a, b, c, d, e, f, g, h] = segments;
1440
+ Ipv6Addr :: new ( a, b, c, d, e, f, g, h)
1441
+ }
1442
+
1403
1443
/// Returns [`true`] for the special 'unspecified' address (`::`).
1404
1444
///
1405
1445
/// This property is defined in [IETF RFC 4291].
@@ -1510,7 +1550,6 @@ impl Ipv6Addr {
1510
1550
///
1511
1551
/// // For a complete overview see the IANA IPv6 Special-Purpose Address Registry.
1512
1552
/// ```
1513
- #[ rustc_const_unstable( feature = "const_ipv6" , issue = "76205" ) ]
1514
1553
#[ unstable( feature = "ip" , issue = "27709" ) ]
1515
1554
#[ must_use]
1516
1555
#[ inline]
@@ -1562,7 +1601,6 @@ impl Ipv6Addr {
1562
1601
/// assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).is_unique_local(), false);
1563
1602
/// assert_eq!(Ipv6Addr::new(0xfc02, 0, 0, 0, 0, 0, 0, 0).is_unique_local(), true);
1564
1603
/// ```
1565
- #[ rustc_const_unstable( feature = "const_ipv6" , issue = "76205" ) ]
1566
1604
#[ unstable( feature = "ip" , issue = "27709" ) ]
1567
1605
#[ must_use]
1568
1606
#[ inline]
@@ -1591,7 +1629,6 @@ impl Ipv6Addr {
1591
1629
/// assert_eq!(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0).is_unicast(), true);
1592
1630
/// assert_eq!(Ipv6Addr::new(0xff00, 0, 0, 0, 0, 0, 0, 0).is_unicast(), false);
1593
1631
/// ```
1594
- #[ rustc_const_unstable( feature = "const_ipv6" , issue = "76205" ) ]
1595
1632
#[ unstable( feature = "ip" , issue = "27709" ) ]
1596
1633
#[ must_use]
1597
1634
#[ inline]
@@ -1643,7 +1680,6 @@ impl Ipv6Addr {
1643
1680
/// assert_eq!(Ipv6Addr::new(0xfe80, 0, 0, 1, 0, 0, 0, 0).is_unicast_link_local(), true);
1644
1681
/// assert_eq!(Ipv6Addr::new(0xfe81, 0, 0, 0, 0, 0, 0, 0).is_unicast_link_local(), true);
1645
1682
/// ```
1646
- #[ rustc_const_unstable( feature = "const_ipv6" , issue = "76205" ) ]
1647
1683
#[ unstable( feature = "ip" , issue = "27709" ) ]
1648
1684
#[ must_use]
1649
1685
#[ inline]
@@ -1668,7 +1704,6 @@ impl Ipv6Addr {
1668
1704
/// assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).is_documentation(), false);
1669
1705
/// assert_eq!(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0).is_documentation(), true);
1670
1706
/// ```
1671
- #[ rustc_const_unstable( feature = "const_ipv6" , issue = "76205" ) ]
1672
1707
#[ unstable( feature = "ip" , issue = "27709" ) ]
1673
1708
#[ must_use]
1674
1709
#[ inline]
@@ -1729,7 +1764,6 @@ impl Ipv6Addr {
1729
1764
/// assert_eq!(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0).is_unicast_global(), false);
1730
1765
/// assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).is_unicast_global(), true);
1731
1766
/// ```
1732
- #[ rustc_const_unstable( feature = "const_ipv6" , issue = "76205" ) ]
1733
1767
#[ unstable( feature = "ip" , issue = "27709" ) ]
1734
1768
#[ must_use]
1735
1769
#[ inline]
@@ -1758,7 +1792,6 @@ impl Ipv6Addr {
1758
1792
/// );
1759
1793
/// assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).multicast_scope(), None);
1760
1794
/// ```
1761
- #[ rustc_const_unstable( feature = "const_ipv6" , issue = "76205" ) ]
1762
1795
#[ unstable( feature = "ip" , issue = "27709" ) ]
1763
1796
#[ must_use]
1764
1797
#[ inline]
@@ -1818,7 +1851,6 @@ impl Ipv6Addr {
1818
1851
///
1819
1852
/// assert_eq!(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0).is_ipv4_mapped(), false);
1820
1853
/// ```
1821
- #[ rustc_const_unstable( feature = "const_ipv6" , issue = "76205" ) ]
1822
1854
#[ unstable( feature = "ip" , issue = "27709" ) ]
1823
1855
#[ must_use]
1824
1856
#[ inline]
@@ -1932,7 +1964,7 @@ impl Ipv6Addr {
1932
1964
/// use std::net::Ipv6Addr;
1933
1965
///
1934
1966
/// 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]);
1967
+ /// [0xff , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
1936
1968
/// ```
1937
1969
#[ rustc_const_stable( feature = "const_ip_32" , since = "1.32.0" ) ]
1938
1970
#[ stable( feature = "ipv6_to_octets" , since = "1.12.0" ) ]
@@ -1941,6 +1973,33 @@ impl Ipv6Addr {
1941
1973
pub const fn octets ( & self ) -> [ u8 ; 16 ] {
1942
1974
self . octets
1943
1975
}
1976
+
1977
+ /// Creates an `Ipv6Addr` from a sixteen element byte array.
1978
+ ///
1979
+ /// # Examples
1980
+ ///
1981
+ /// ```
1982
+ /// #![feature(ip_from)]
1983
+ /// use std::net::Ipv6Addr;
1984
+ ///
1985
+ /// let addr = Ipv6Addr::from_octets([
1986
+ /// 0x19u8, 0x18u8, 0x17u8, 0x16u8, 0x15u8, 0x14u8, 0x13u8, 0x12u8,
1987
+ /// 0x11u8, 0x10u8, 0x0fu8, 0x0eu8, 0x0du8, 0x0cu8, 0x0bu8, 0x0au8,
1988
+ /// ]);
1989
+ /// assert_eq!(
1990
+ /// Ipv6Addr::new(
1991
+ /// 0x1918, 0x1716, 0x1514, 0x1312,
1992
+ /// 0x1110, 0x0f0e, 0x0d0c, 0x0b0a,
1993
+ /// ),
1994
+ /// addr
1995
+ /// );
1996
+ /// ```
1997
+ #[ unstable( feature = "ip_from" , issue = "131360" ) ]
1998
+ #[ must_use]
1999
+ #[ inline]
2000
+ pub const fn from_octets ( octets : [ u8 ; 16 ] ) -> Ipv6Addr {
2001
+ Ipv6Addr { octets }
2002
+ }
1944
2003
}
1945
2004
1946
2005
/// Writes an Ipv6Addr, conforming to the canonical style described by
@@ -2113,15 +2172,13 @@ impl From<[u8; 16]> for Ipv6Addr {
2113
2172
/// use std::net::Ipv6Addr;
2114
2173
///
2115
2174
/// let addr = Ipv6Addr::from([
2116
- /// 25u8, 24u8, 23u8, 22u8, 21u8, 20u8, 19u8, 18u8 ,
2117
- /// 17u8, 16u8, 15u8, 14u8, 13u8, 12u8, 11u8, 10u8 ,
2175
+ /// 0x19u8, 0x18u8, 0x17u8, 0x16u8, 0x15u8, 0x14u8, 0x13u8, 0x12u8 ,
2176
+ /// 0x11u8, 0x10u8, 0x0fu8, 0x0eu8, 0x0du8, 0x0cu8, 0x0bu8, 0x0au8 ,
2118
2177
/// ]);
2119
2178
/// assert_eq!(
2120
2179
/// Ipv6Addr::new(
2121
- /// 0x1918, 0x1716,
2122
- /// 0x1514, 0x1312,
2123
- /// 0x1110, 0x0f0e,
2124
- /// 0x0d0c, 0x0b0a
2180
+ /// 0x1918, 0x1716, 0x1514, 0x1312,
2181
+ /// 0x1110, 0x0f0e, 0x0d0c, 0x0b0a,
2125
2182
/// ),
2126
2183
/// addr
2127
2184
/// );
@@ -2142,15 +2199,13 @@ impl From<[u16; 8]> for Ipv6Addr {
2142
2199
/// use std::net::Ipv6Addr;
2143
2200
///
2144
2201
/// let addr = Ipv6Addr::from([
2145
- /// 525u16, 524u16, 523u16, 522u16 ,
2146
- /// 521u16, 520u16, 519u16, 518u16 ,
2202
+ /// 0x20du16, 0x20cu16, 0x20bu16, 0x20au16 ,
2203
+ /// 0x209u16, 0x208u16, 0x207u16, 0x206u16 ,
2147
2204
/// ]);
2148
2205
/// assert_eq!(
2149
2206
/// Ipv6Addr::new(
2150
- /// 0x20d, 0x20c,
2151
- /// 0x20b, 0x20a,
2152
- /// 0x209, 0x208,
2153
- /// 0x207, 0x206
2207
+ /// 0x20d, 0x20c, 0x20b, 0x20a,
2208
+ /// 0x209, 0x208, 0x207, 0x206,
2154
2209
/// ),
2155
2210
/// addr
2156
2211
/// );
@@ -2172,15 +2227,13 @@ impl From<[u8; 16]> for IpAddr {
2172
2227
/// use std::net::{IpAddr, Ipv6Addr};
2173
2228
///
2174
2229
/// let addr = IpAddr::from([
2175
- /// 25u8, 24u8, 23u8, 22u8, 21u8, 20u8, 19u8, 18u8 ,
2176
- /// 17u8, 16u8, 15u8, 14u8, 13u8, 12u8, 11u8, 10u8 ,
2230
+ /// 0x19u8, 0x18u8, 0x17u8, 0x16u8, 0x15u8, 0x14u8, 0x13u8, 0x12u8 ,
2231
+ /// 0x11u8, 0x10u8, 0x0fu8, 0x0eu8, 0x0du8, 0x0cu8, 0x0bu8, 0x0au8 ,
2177
2232
/// ]);
2178
2233
/// assert_eq!(
2179
2234
/// IpAddr::V6(Ipv6Addr::new(
2180
- /// 0x1918, 0x1716,
2181
- /// 0x1514, 0x1312,
2182
- /// 0x1110, 0x0f0e,
2183
- /// 0x0d0c, 0x0b0a
2235
+ /// 0x1918, 0x1716, 0x1514, 0x1312,
2236
+ /// 0x1110, 0x0f0e, 0x0d0c, 0x0b0a,
2184
2237
/// )),
2185
2238
/// addr
2186
2239
/// );
@@ -2201,15 +2254,13 @@ impl From<[u16; 8]> for IpAddr {
2201
2254
/// use std::net::{IpAddr, Ipv6Addr};
2202
2255
///
2203
2256
/// let addr = IpAddr::from([
2204
- /// 525u16, 524u16, 523u16, 522u16 ,
2205
- /// 521u16, 520u16, 519u16, 518u16 ,
2257
+ /// 0x20du16, 0x20cu16, 0x20bu16, 0x20au16 ,
2258
+ /// 0x209u16, 0x208u16, 0x207u16, 0x206u16 ,
2206
2259
/// ]);
2207
2260
/// assert_eq!(
2208
2261
/// IpAddr::V6(Ipv6Addr::new(
2209
- /// 0x20d, 0x20c,
2210
- /// 0x20b, 0x20a,
2211
- /// 0x209, 0x208,
2212
- /// 0x207, 0x206
2262
+ /// 0x20d, 0x20c, 0x20b, 0x20a,
2263
+ /// 0x209, 0x208, 0x207, 0x206,
2213
2264
/// )),
2214
2265
/// addr
2215
2266
/// );
0 commit comments