Решением является использование сопоставления с образцом:
fn my_fun() -> Result<T, MyError> {
if let Ok(Some(thing)) = other_fun() {
Ok(thing)
} else {
Err(MyError{})
}
}
или
fn my_fun() -> Result<T, MyError> {
match other_fun() {
Ok(Some(thing)) => Ok(thing),
_ => Err(MyError{}),
}
}
Если ваша ошибка реализует From<TheOtherError>
, что, вероятно, является хорошей идеей, вы также можете сделать
fn my_fun() -> Result<T, MyError> {
other_fun()?.ok_or(MyError{})
}