- Feature Name:
core_net_types - Start Date: 2019-12-06
- RFC PR: rust-lang/rfcs#2832
- Rust Issue: rust-lang/rust#108443
Summary
Make the IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4,
SocketAddrV6, Ipv6MulticastScope and AddrParseError types available in no_std
contexts by moving them into a core::net module.
Motivation
The motivation here is to provide common types for both no_std and std
targets which in turn will ease the creation of libraries based around IP
addresses. Embedded IoT development is one area where this will be beneficial.
IP addresses are portable across all platforms and have no external
dependencies which is in line with the definition of the core library.
Guide-level explanation
The core::net::IpAddr, core::net::Ipv4Addr, core::net::Ipv6Addr,
core::net::SocketAddr, core::net::SocketAddrV4, core::net::SocketAddrV6,
core::net::Ipv6MulticastScope and core::net::AddrParseError types are
available in no_std contexts.
Library developers should use core::net to implement abstractions in order
for them to work in no_std contexts as well.
Reference-level explanation
Since https://github.com/rust-lang/rust/pull/78802 has been merged, IP and
socket address types are implemented in ideal Rust layout instead of wrapping
their corresponding libc representation.
Formatting for these types has also been adjusted in
https://github.com/rust-lang/rust/pull/100625 and
https://github.com/rust-lang/rust/pull/100640 in order to remove the dependency
on std::io::Write.
This means the types are now platform-agnostic, allowing them to be moved from
std::net into core::net.
Drawbacks
Moving the std::net types to core::net makes the core library less minimal.
Rationale and alternatives
-
Eliminates the need to use different abstractions for
no_stdandstd. -
Alternatively, move these types into a library other than
core, so they can be used withoutstd, and re-export them instd.
Prior art
There was a prior discussion at
https://internals.rust-lang.org/t/std-ipv4addr-in-core/11247/15
and an experimental branch from @Nemo157 at
https://github.com/Nemo157/rust/tree/core-ip
Unresolved questions
None.
Future possibilities
Move the ToSocketAddrs trait to core::net as well. This depends on having core::io::Result.