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: