4 ms·
Any reason why this wasn't preferred? let foo_result = foo() .map_err(Bar::Fail)?;
by mathstuf 4y ago
Any reason why this wasn't preferred?
let foo_result = foo()
.map_err(Bar::Fail)?;
- veber-alex 4y agoBar::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.