Re:Rust: A Critical Retrospective
by mathstuf on Thursday May 19, 2022 @11:51AM
(#31436249)
Any reason why this wasn't preferred?
[ Parent
| on HN ]
Re:Rust: A Critical Retrospective
by veber-alex on Thursday May 19, 2022 @12:07PM
(#31436486)
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)
};The 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).
Re:Rust: A Critical Retrospective
by veber-alex on Thursday May 19, 2022 @12:27PM
(#31436724)
GP's code will return Result<_, Bar>, the original code we are trying to fix just returns Bar.