Skip to content

Commit

Permalink
Explain the "no-error" io::Error case
Browse files Browse the repository at this point in the history
Fundamentally, querying the OS for error codes is a process
that is deeply subject to the whims of chance and fortune.
We can account for OS, but not for every combination of platform APIs.
A compiled binary may not recognize new errors introduced years later.
We should clarify a few especially odd situations, and what they mean:
We can effectively promise nothing.

This allows removing mention of ErrorKind::Uncategorized.
That error variant is hidden quite deliberately, so we
should not explicitly mention it.
  • Loading branch information
workingjubilee committed Jan 17, 2023
1 parent 4781233 commit 2d927cc
Showing 1 changed file with 16 additions and 2 deletions.
18 changes: 16 additions & 2 deletions library/std/src/io/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -359,7 +359,7 @@ pub enum ErrorKind {

// "Unusual" error kinds which do not correspond simply to (sets
// of) OS error codes, should be added just above this comment.
// `Other` and `Uncategorised` should remain at the end:
// `Other` and `Uncategorized` should remain at the end:
//
/// A custom error that does not fall under any other I/O error kind.
///
Expand Down Expand Up @@ -565,6 +565,12 @@ impl Error {
/// other standard library functions may call platform functions that may
/// (or may not) reset the error value even if they succeed.
///
/// If this is used in a case where no error has yet occurred in a program,
/// e.g. right after the beginning of `fn main`,
/// then in principle any possible Error may be returned.
/// The error code may have been set by a previous program (e.g. `execve`)
/// or the OS may have initialized it to an arbitrary, even random, value.
///
/// # Examples
///
/// ```
Expand Down Expand Up @@ -871,6 +877,13 @@ impl Error {

/// Returns the corresponding [`ErrorKind`] for this error.
///
/// In some cases, the ErrorKind variant may not make much sense,
/// either because the situation does not actually involve an error, or
/// because of a new error code the standard library has not been taught.
/// See [`last_os_error`] for more details.
///
/// [`last_os_error`]: Error::last_os_error
///
/// # Examples
///
/// ```
Expand All @@ -881,7 +894,8 @@ impl Error {
/// }
///
/// fn main() {
/// // Will print "Uncategorized".
/// // As no error has occurred, this may print anything!
/// // It likely prints a placeholder for unidentified (non-)errors.
/// print_error(Error::last_os_error());
/// // Will print "AddrInUse".
/// print_error(Error::new(ErrorKind::AddrInUse, "oh no!"));
Expand Down

0 comments on commit 2d927cc

Please sign in to comment.