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)
};