|  | 
| 2 | 2 | //! | 
| 3 | 3 | //! [`Result<T, E>`][`Result`] is the type used for returning and propagating | 
| 4 | 4 | //! errors. It is an enum with the variants, [`Ok(T)`], representing success and | 
| 5 |  | -//! containing a value, and [`Err(E)`], representing error and containing an | 
| 6 |  | -//! error value. | 
|  | 5 | +//! success and containing a value, and [`Err(E)`], representing error | 
|  | 6 | +//! and containing an error value. | 
| 7 | 7 | //! | 
| 8 | 8 | //! ``` | 
| 9 | 9 | //! # #[allow(dead_code)] | 
|  | 
| 14 | 14 | //! ``` | 
| 15 | 15 | //! | 
| 16 | 16 | //! Functions return [`Result`] whenever errors are expected and recoverable. In | 
| 17 |  | -//! the `std` crate, [`Result`] is most prominently used for | 
| 18 |  | -//! [I/O](../../std/io/index.html). | 
|  | 17 | +//! recoverable. In the `std` crate, [`Result`] is most prominently used | 
|  | 18 | +//! for [I/O](../../std/io/index.html). | 
| 19 | 19 | //! | 
| 20 |  | -//! A simple function returning [`Result`] might be defined and used like so: | 
|  | 20 | +//! A simple function returning [`Result`] might be | 
|  | 21 | +//! defined and used like so: | 
| 21 | 22 | //! | 
| 22 | 23 | //! ``` | 
| 23 | 24 | //! #[derive(Debug)] | 
|  | 
| 40 | 41 | //! ``` | 
| 41 | 42 | //! | 
| 42 | 43 | //! Pattern matching on [`Result`]s is clear and straightforward for simple | 
| 43 |  | -//! cases, but [`Result`] comes with some convenience methods that make working | 
| 44 |  | -//! with it more succinct. | 
|  | 44 | +//! simple cases, but [`Result`] comes with some convenience methods | 
|  | 45 | +//! that make working with it more succinct. | 
| 45 | 46 | //! | 
| 46 | 47 | //! ``` | 
| 47 | 48 | //! let good_result: Result<i32, i32> = Ok(10); | 
|  | 
| 67 | 68 | //! | 
| 68 | 69 | //! # Results must be used | 
| 69 | 70 | //! | 
| 70 |  | -//! A common problem with using return values to indicate errors is that it is | 
| 71 |  | -//! easy to ignore the return value, thus failing to handle the error. | 
| 72 |  | -//! [`Result`] is annotated with the `#[must_use]` attribute, which will cause | 
| 73 |  | -//! the compiler to issue a warning when a Result value is ignored. This makes | 
| 74 |  | -//! [`Result`] especially useful with functions that may encounter errors but | 
| 75 |  | -//! don't otherwise return a useful value. | 
|  | 71 | +//! A common problem with using return values to indicate errors is | 
|  | 72 | +//! that it is easy to ignore the return value, thus failing to handle | 
|  | 73 | +//! the error. [`Result`] is annotated with the `#[must_use]` attribute, | 
|  | 74 | +//! which will cause the compiler to issue a warning when a Result | 
|  | 75 | +//! value is ignored. This makes [`Result`] especially useful with | 
|  | 76 | +//! functions that may encounter errors but don't otherwise return a | 
|  | 77 | +//! useful value. | 
| 76 | 78 | //! | 
| 77 |  | -//! Consider the [`write_all`] method defined for I/O types by the [`Write`] | 
| 78 |  | -//! trait: | 
|  | 79 | +//! Consider the [`write_all`] method defined for I/O types | 
|  | 80 | +//! by the [`Write`] trait: | 
| 79 | 81 | //! | 
| 80 | 82 | //! ``` | 
| 81 | 83 | //! use std::io; | 
|  | 
| 85 | 87 | //! } | 
| 86 | 88 | //! ``` | 
| 87 | 89 | //! | 
| 88 |  | -//! *Note: The actual definition of [`Write`] uses [`io::Result`], which is just | 
| 89 |  | -//! a synonym for <code>[Result]<T, [io::Error]></code>.* | 
|  | 90 | +//! *Note: The actual definition of [`Write`] uses [`io::Result`], which | 
|  | 91 | +//! is just a synonym for <code>[Result]<T, [io::Error]></code>.* | 
| 90 | 92 | //! | 
| 91 |  | -//! This method doesn't produce a value, but the write may fail. It's crucial to | 
| 92 |  | -//! handle the error case, and *not* write something like this: | 
|  | 93 | +//! This method doesn't produce a value, but the write may | 
|  | 94 | +//! fail. It's crucial to handle the error case, and *not* write | 
|  | 95 | +//! something like this: | 
| 93 | 96 | //! | 
| 94 | 97 | //! ```no_run | 
| 95 | 98 | //! # #![allow(unused_must_use)] // \o/ | 
|  | 
| 102 | 105 | //! file.write_all(b"important message"); | 
| 103 | 106 | //! ``` | 
| 104 | 107 | //! | 
| 105 |  | -//! If you *do* write that in Rust, the compiler will give you a warning (by | 
| 106 |  | -//! default, controlled by the `unused_must_use` lint). | 
|  | 108 | +//! If you *do* write that in Rust, the compiler will give you a | 
|  | 109 | +//! warning (by default, controlled by the `unused_must_use` lint). | 
| 107 | 110 | //! | 
| 108 |  | -//! You might instead, if you don't want to handle the error, simply assert | 
| 109 |  | -//! success with [`expect`]. This will panic if the write fails, providing a | 
| 110 |  | -//! marginally useful message indicating why: | 
|  | 111 | +//! You might instead, if you don't want to handle the error, simply | 
|  | 112 | +//! assert success with [`expect`]. This will panic if the | 
|  | 113 | +//! write fails, providing a marginally useful message indicating why: | 
| 111 | 114 | //! | 
| 112 | 115 | //! ```no_run | 
| 113 | 116 | //! use std::fs::File; | 
|  | 
| 142 | 145 | //! | 
| 143 | 146 | //! # The question mark operator, `?` | 
| 144 | 147 | //! | 
| 145 |  | -//! When writing code that calls many functions that return the [`Result`] type, | 
| 146 |  | -//! the error handling can be tedious. The question mark operator, [`?`], hides | 
| 147 |  | -//! some of the boilerplate of propagating errors up the call stack. | 
|  | 148 | +//! When writing code that calls many functions that return the | 
|  | 149 | +//! [`Result`] type, the error handling can be tedious. The question mark | 
|  | 150 | +//! operator, [`?`], hides some of the boilerplate of propagating errors | 
|  | 151 | +//! up the call stack. | 
| 148 | 152 | //! | 
| 149 | 153 | //! It replaces this: | 
| 150 | 154 | //! | 
|  | 
| 205 | 209 | //! | 
| 206 | 210 | //! *It's much nicer!* | 
| 207 | 211 | //! | 
| 208 |  | -//! Ending the expression with [`?`] will result in the [`Ok`]'s unwrapped | 
| 209 |  | -//! value, unless the result is [`Err`], in which case [`Err`] is returned early | 
| 210 |  | -//! from the enclosing function. | 
|  | 212 | +//! Ending the expression with [`?`] will result in the [`Ok`]'s unwrapped value, unless the result | 
|  | 213 | +//! is [`Err`], in which case [`Err`] is returned early from the enclosing function. | 
| 211 | 214 | //! | 
| 212 |  | -//! [`?`] can be used in functions that return [`Result`] because of the early | 
| 213 |  | -//! return of [`Err`] that it provides. | 
|  | 215 | +//! [`?`] can be used in functions that return [`Result`] because of the | 
|  | 216 | +//! early return of [`Err`] that it provides. | 
| 214 | 217 | //! | 
| 215 | 218 | //! [`expect`]: Result::expect | 
| 216 | 219 | //! [`Write`]: ../../std/io/trait.Write.html "io::Write" | 
| 217 |  | -//! [`write_all`]: ../../std/io/trait.Write.html#method.write_all | 
| 218 |  | -//!     "io::Write::write_all" | 
|  | 220 | +//! [`write_all`]: ../../std/io/trait.Write.html#method.write_all "io::Write::write_all" | 
| 219 | 221 | //! [`io::Result`]: ../../std/io/type.Result.html "io::Result" | 
| 220 | 222 | //! [`?`]: crate::ops::Try | 
| 221 | 223 | //! [`Ok(T)`]: Ok | 
|  | 
| 250 | 252 | //! | 
| 251 | 253 | //! ## Querying the variant | 
| 252 | 254 | //! | 
| 253 |  | -//! The [`is_ok`] and [`is_err`] methods return [`true`] if the [`Result`] is | 
| 254 |  | -//! [`Ok`] or [`Err`], respectively. | 
|  | 255 | +//! In addition to working with pattern matching, [`Result`] provides a | 
|  | 256 | +//! wide variety of different methods. | 
| 255 | 257 | //! | 
| 256 | 258 | //! [`is_err`]: Result::is_err | 
| 257 | 259 | //! [`is_ok`]: Result::is_ok | 
|  | 
| 261 | 263 | //! * [`as_ref`] converts from `&Result<T, E>` to `Result<&T, &E>` | 
| 262 | 264 | //! * [`as_mut`] converts from `&mut Result<T, E>` to `Result<&mut T, &mut E>` | 
| 263 | 265 | //! * [`as_deref`] converts from `&Result<T, E>` to `Result<&T::Target, &E>` | 
| 264 |  | -//! * [`as_deref_mut`] converts from `&mut Result<T, E>` to `Result<&mut | 
| 265 |  | -//!   T::Target, &mut E>` | 
|  | 266 | +//! * [`as_deref_mut`] converts from `&mut Result<T, E>` to | 
|  | 267 | +//!   `Result<&mut T::Target, &mut E>` | 
| 266 | 268 | //! | 
| 267 | 269 | //! [`as_deref`]: Result::as_deref | 
| 268 | 270 | //! [`as_deref_mut`]: Result::as_deref_mut | 
|  | 
| 271 | 273 | //! | 
| 272 | 274 | //! ## Extracting contained values | 
| 273 | 275 | //! | 
| 274 |  | -//! These methods extract the contained value in a [`Result<T, E>`] when it is | 
| 275 |  | -//! the [`Ok`] variant. If the [`Result`] is [`Err`]: | 
|  | 276 | +//! These methods extract the contained value in a [`Result<T, E>`] when it | 
|  | 277 | +//! is the [`Ok`] variant. If the [`Result`] is [`Err`]: | 
| 276 | 278 | //! | 
| 277 | 279 | //! * [`expect`] panics with a provided custom message | 
| 278 | 280 | //! * [`unwrap`] panics with a generic message | 
| 279 | 281 | //! * [`unwrap_or`] returns the provided default value | 
| 280 |  | -//! * [`unwrap_or_default`] returns the default value of the type `T` (which | 
| 281 |  | -//!   must implement the [`Default`] trait) | 
| 282 |  | -//! * [`unwrap_or_else`] returns the result of evaluating the provided function | 
|  | 282 | +//! * [`unwrap_or_default`] returns the default value of the type `T` | 
|  | 283 | +//!   (which must implement the [`Default`] trait) | 
|  | 284 | +//! * [`unwrap_or_else`] returns the result of evaluating the provided | 
|  | 285 | +//!   function | 
| 283 | 286 | //! | 
| 284 |  | -//! The panicking methods [`expect`] and [`unwrap`] require `E` to implement the | 
| 285 |  | -//! [`Debug`] trait. | 
|  | 287 | +//! The panicking methods [`expect`] and [`unwrap`] require `E` to | 
|  | 288 | +//! implement the [`Debug`] trait. | 
| 286 | 289 | //! | 
| 287 | 290 | //! [`Debug`]: crate::fmt::Debug | 
| 288 | 291 | //! [`expect`]: Result::expect | 
|  | 
| 291 | 294 | //! [`unwrap_or_default`]: Result::unwrap_or_default | 
| 292 | 295 | //! [`unwrap_or_else`]: Result::unwrap_or_else | 
| 293 | 296 | //! | 
| 294 |  | -//! These methods extract the contained value in a [`Result<T, E>`] when it is | 
| 295 |  | -//! the [`Err`] variant. They require `T` to implement the [`Debug`] trait. If | 
| 296 |  | -//! the [`Result`] is [`Ok`]: | 
|  | 297 | +//! These methods extract the contained value in a [`Result<T, E>`] when it | 
|  | 298 | +//! is the [`Err`] variant. They require `T` to implement the [`Debug`] | 
|  | 299 | +//! trait. If the [`Result`] is [`Ok`]: | 
| 297 | 300 | //! | 
| 298 | 301 | //! * [`expect_err`] panics with a provided custom message | 
| 299 | 302 | //! * [`unwrap_err`] panics with a generic message | 
|  | 
| 308 | 311 | //! | 
| 309 | 312 | //! * [`err`][Result::err] transforms [`Result<T, E>`] into [`Option<E>`], | 
| 310 | 313 | //!   mapping [`Err(e)`] to [`Some(e)`] and [`Ok(v)`] to [`None`] | 
| 311 |  | -//! * [`ok`][Result::ok] transforms [`Result<T, E>`] into [`Option<T>`], mapping | 
| 312 |  | -//!   [`Ok(v)`] to [`Some(v)`] and [`Err(e)`] to [`None`] | 
| 313 |  | -//! * [`transpose`] transposes a [`Result`] of an [`Option`] into an [`Option`] | 
| 314 |  | -//!   of a [`Result`] | 
|  | 314 | +//! * [`ok`][Result::ok] transforms [`Result<T, E>`] into [`Option<T>`], | 
|  | 315 | +//!   mapping [`Ok(v)`] to [`Some(v)`] and [`Err(e)`] to [`None`] | 
|  | 316 | +//! * [`transpose`] transposes a [`Result`] of an [`Option`] into an | 
|  | 317 | +//!   [`Option`] of a [`Result`] | 
| 315 | 318 | //! | 
| 316 | 319 | // Do NOT add link reference definitions for `err` or `ok`, because they | 
| 317 | 320 | // will generate numerous incorrect URLs for `Err` and `Ok` elsewhere, due | 
|  | 
0 commit comments