3 ms·
Bar::Fail is not wrapped in a Result type, so you can't use '?' with it (on stable at least). You can write it like this: let foo_result = match foo() {
by veber-alex 4y ago
Bar::Fail is not wrapped in a Result type, so you can't use '?' with it (on stable at least).
You can write it like this:
let foo_result = match foo() {
Ok(v) => v,
Err(e) => return Bar::Fail(e)
};
- loeg 4y agoThe result type is the return from Foo -- Bar::Fail does not need to wrap Result. Foo is Result<T, E> and map_err() would convert it to Result<T, Bar::Fail>. I think GP's `map_err()?` is the most straightforward way of writing this idea (and it's generally speaking how I would suggest writing Rust code).
- veber-alex 4y agoGP's code will return Result<_, Bar>, the original code we are trying to fix just returns Bar.
- loeg 4y agoIf you are writing code to handle Results, it’s going to be a lot less painful to just return Result.