Converting Error Types

The effective expansion of ? is a little more complicated than previously indicated:

  1. expression?

works the same as

  1. match expression {
  2. Ok(value) => value,
  3. Err(err) => return Err(From::from(err)),
  4. }

The From::from call here means we attempt to convert the error type to the type returned by the function: