我不断地遇到生 rust 的模式。我的解决方案似乎非常冗长。想知道是否有更惯用的方法来完成同样的事情。
我有一个函数,在执行到一半的时候可能会出错。我需要要么得到结果并继续处理,要么返回一个错误。这个错误需要一个自定义类型并有一些上下文。
async fn load_data() -> Result<SomeOutput, MyError> {
...
let raw = match str::from_utf8(&output.stdout) {
Ok(o) => o,
Err(e) => {
return Err(MyError::FailedParse(
"failed to read output from command X".into(),
e.to_string(),
));
}
};
...
}
我已经考虑过在原始错误类型中添加一个From
trait,但是这样错误总是会被转换成那个类型。我想更多地控制什么时候返回什么类型的错误。
1条答案
按热度按时间dffbzjpn1#
这取决于你到底需要什么。
对于初学者来说,当然有
?
操作,不确定operator这个词是否正确,当然,这要求底层错误的From
trait是为您的错误类型实现的,它缺乏您所寻求的控制。因此,
Result
上实现了各种方法,您可以使用map_err
将底层错误转换为您实际想要返回的错误。这可能会比你想的要麻烦得多,所以还有两个板条箱需要检查:
anyhow
和thiserror