]> git.lizzy.rs Git - rust.git/commit
Auto merge of #85746 - m-ou-se:io-error-other, r=joshtriplett
authorbors <bors@rust-lang.org>
Fri, 2 Jul 2021 09:01:42 +0000 (09:01 +0000)
committerbors <bors@rust-lang.org>
Fri, 2 Jul 2021 09:01:42 +0000 (09:01 +0000)
commitf9fa13f705bb8b1c57c6b6fe95055ec4995a40f0
treebbb013fe0b9af5703ce1a04f75d6435d61f473ad
parent1aa6c7cbc6d2582e7407cde9c65014aef8a189bb
parentcc907330083a18a9067664c1db3db1959f58d00c
Auto merge of #85746 - m-ou-se:io-error-other, r=joshtriplett

Redefine `ErrorKind::Other` and stop using it in std.

This implements the idea I shared yesterday in the libs meeting when we were discussing how to handle adding new `ErrorKind`s to the standard library: This redefines `Other` to be for *user defined errors only*, and changes all uses of `Other` in the standard library to a `#[doc(hidden)]` and permanently `#[unstable]` `ErrorKind` that users can not match on. This ensures that adding `ErrorKind`s at a later point in time is not a breaking change, since the user couldn't match on these errors anyway. This way, we use the `#[non_exhaustive]` property of the enum in a more effective way.

Open questions:
- How do we check this change doesn't cause too much breakage? Will a crate run help and be enough?
- How do we ensure we don't accidentally start using `Other` again in the standard library? We don't have a `pub(not crate)` or `#[deprecated(in this crate only)]`.

cc https://github.com/rust-lang/rust/pull/79965

cc `@rust-lang/libs` `@ijackson`

r? `@dtolnay`
library/std/src/fs.rs
library/std/src/io/mod.rs
library/std/src/process.rs
library/std/src/sys/hermit/thread.rs
library/std/src/sys/unix/mod.rs
library/std/src/sys/unix/net.rs
library/std/src/sys/unix/os.rs