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.
You can write it like this: